使用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位十六进制所代表的任意字符 | 二位十六进制 |
| | |