Java中如何替代反斜杠转义字符?replaceAll方法有何内涵?

2026-06-10 13:501阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计737个文字,预计阅读时间需要3分钟。

Java中如何替代反斜杠\转义字符?replaceAll方法有何内涵?

1. 需求:现有字符串str,String类型,str={ \name\: \spy\, \id\: \123456\ };

2. 目标:将str转换为标准格式;

3. 实现:javaString str={ \name\: \spy\, \id\: \123456\ };System.out.println(str= + str);

4. 控制台输出:str={ name: spy, id: 123456 }

Java中如何替代反斜杠\转义字符?replaceAll方法有何内涵?

一、需求

现有一个字符串str

String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}"; System.out.println("str = " + str);

在控制台的输出为:

str = {\"name\":\"spy\",\"id\":\"123456\"}

目标:将str转化为标准的json格式串str1,以调用JsonUtil的方法,将字符串转为map。即目标str1为:

str1 = {"name":"spy","id":"123456"}

二、实现方法

1. 使用 StringEscapeUtils中的转义与反转义

apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils。利用它可方便地进行html、xml、java等的转义与反转义。

String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}"; System.out.println("原始 str = " + str); String str1 = StringEscapeUtils.unescapeJava(str); System.out.println("目标 str1 = " + str1); //对应方法的StringEscapeUtils.escapeJava(str1); //可将str1转义回str

控制台输出:

原始 str = {\"name\":\"spy\",\"id\":\"123456\"}
目标 str1 = {"name":"spy","id":"123456"}

2. 使用Java的replaceAll方法

String str1 = str.replaceAll("\\\\",""); //控制台str1的输出为:{"name":"spy","id":"123456"}

三、Java 的replaceAll 内涵解析

使用Java的replaceAll(String regex, String replacement)函数,即用replacement替换所有的regex匹配项,regex是一个正则表达式,replacement是字符串。

String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";

(1)对于串str,Java将其进行转义,\\ 表示 \ ,\” 表示 ” ,故而在Java内存中即为:
{\”name\”:\”spy\”,\”id\”:\”123456\”},然而,我们的目标是 {“name”:”spy”,”id”:”123456”},即将转义字符 \ 替换为空。

(2)Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。在正则表达式中的“\”与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如”\n”表示换行符等。所以,如果要在正则表达式中表示一个反斜杠\,则应当用\\表达 。但参数regex 首先会经过Java的一次转义,若想表达两个反斜杠 \\,则需四个反斜杠。

综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:

str1 = str.replaceAll("\\\\","");

四、补充说明

String的replaceAll 同Matcher.replaceAll. 如下是String的repalceAll的源码实现。

public String repalceAll(String expr,String substitute){ return Pattern.compile(expr).matcher(this).replaceAll(substitute); }

大家可以注意到Pattern.compile(expr)的参数是正则表达式。故而:

错误写法(运行报错):

String tmp = Pattern.compile("\\").matcher("h\\").replaceAll("ello");

正确写法:

String tmp = Pattern.compile("\\\\").matcher("h\\").replaceAll("ello"); //输出为hello

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计737个文字,预计阅读时间需要3分钟。

Java中如何替代反斜杠\转义字符?replaceAll方法有何内涵?

1. 需求:现有字符串str,String类型,str={ \name\: \spy\, \id\: \123456\ };

2. 目标:将str转换为标准格式;

3. 实现:javaString str={ \name\: \spy\, \id\: \123456\ };System.out.println(str= + str);

4. 控制台输出:str={ name: spy, id: 123456 }

Java中如何替代反斜杠\转义字符?replaceAll方法有何内涵?

一、需求

现有一个字符串str

String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}"; System.out.println("str = " + str);

在控制台的输出为:

str = {\"name\":\"spy\",\"id\":\"123456\"}

目标:将str转化为标准的json格式串str1,以调用JsonUtil的方法,将字符串转为map。即目标str1为:

str1 = {"name":"spy","id":"123456"}

二、实现方法

1. 使用 StringEscapeUtils中的转义与反转义

apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils。利用它可方便地进行html、xml、java等的转义与反转义。

String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}"; System.out.println("原始 str = " + str); String str1 = StringEscapeUtils.unescapeJava(str); System.out.println("目标 str1 = " + str1); //对应方法的StringEscapeUtils.escapeJava(str1); //可将str1转义回str

控制台输出:

原始 str = {\"name\":\"spy\",\"id\":\"123456\"}
目标 str1 = {"name":"spy","id":"123456"}

2. 使用Java的replaceAll方法

String str1 = str.replaceAll("\\\\",""); //控制台str1的输出为:{"name":"spy","id":"123456"}

三、Java 的replaceAll 内涵解析

使用Java的replaceAll(String regex, String replacement)函数,即用replacement替换所有的regex匹配项,regex是一个正则表达式,replacement是字符串。

String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";

(1)对于串str,Java将其进行转义,\\ 表示 \ ,\” 表示 ” ,故而在Java内存中即为:
{\”name\”:\”spy\”,\”id\”:\”123456\”},然而,我们的目标是 {“name”:”spy”,”id”:”123456”},即将转义字符 \ 替换为空。

(2)Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。在正则表达式中的“\”与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如”\n”表示换行符等。所以,如果要在正则表达式中表示一个反斜杠\,则应当用\\表达 。但参数regex 首先会经过Java的一次转义,若想表达两个反斜杠 \\,则需四个反斜杠。

综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:

str1 = str.replaceAll("\\\\","");

四、补充说明

String的replaceAll 同Matcher.replaceAll. 如下是String的repalceAll的源码实现。

public String repalceAll(String expr,String substitute){ return Pattern.compile(expr).matcher(this).replaceAll(substitute); }

大家可以注意到Pattern.compile(expr)的参数是正则表达式。故而:

错误写法(运行报错):

String tmp = Pattern.compile("\\").matcher("h\\").replaceAll("ello");

正确写法:

String tmp = Pattern.compile("\\\\").matcher("h\\").replaceAll("ello"); //输出为hello

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。