使用Java的replaceAll(String regex, String replacement)函数可替换字符串中所有指定字符。

regex是一个正则表达式,replacement是字符串。用replacement替换所有的regex匹配项。

String str = "{\\\"aaa\\\":\\\"bbb\\\",\\\"ccc\\\\":\\\"ddd\\\"}";

1.对于串str,Java将其进行转义,\\ 表示 \ ,\" 表示 "

在Java内存中即为:{\"aaa\":\"bbb\",\"ccc\":\"ddd\"},

然而,我们的目标是 {"aaa":"bbb","ccc":"ddd"},即将转义字符 \ 替换为空。

2.Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。

在正则表达式中的"\"与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如"\n"表示换行符等。

所以,如果要在正则表达式中表示一个反斜杠\,则应当用\\表达 。

但参数regex 首先会经过Java的一次转义,若想表达两个反斜杠 \\,则需四个反斜杠。

综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。

因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:

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

//例 替换图片路径中的\

String picPath = "E:\\back\\img\\pic.png";

String result = picPath.replaceAll("\\\\","/");

// 得到地址 E:/back/img/pic.png

  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

 

转义字符

含义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\0

空字符(NULL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

1到2位十六进制所代表的任意字符

二位十六进制