java中反斜杠的替换问题
有正斜杠与反斜杠之分,正斜杠,⼀般就叫做斜杠,符号为“/”;反斜杠的符号为“\”。
斜杠(/)在JAVA中没有什么特别的意义,就是代表⼀个字符‘/’;
反斜杠(\)则不然,它和紧跟着它的那个字符构成转义字符,如“\n”(换⾏)、“\””(字符‘”‘)等,所以在字符串中要表⽰字符’\’要⽤“\\”来表⽰,例:如果你这样定义⼀个字符串String s = “name\sex”是错误的,要这样定义String s = “name\\sex”;
注意:在正则表达式中的“\\”表⽰和后⾯紧跟着的那个字符构成⼀个转义字符(姑且先这样命名),代表着特殊的意义;所以如果你要在正则表达式中表⽰⼀个反斜杠\,应当写成”\\\\”。如果你这样获得⼀个Matcher,Matcher m= Patternpile(“\\”).matcher(“\\”)将会报错,你应当这样写Matcher m =
Patternpile(“\\\\”).matcher(“\\”)才是正确且匹配的
接下来我们来看⼀下String类中replace(CharSequencetarget,CharSequence replacement)⽅法与replaceAll(String regex,String replacement)⽅法的区别:
我们先看⼀个例⼦:
public static voidmain(String[] arg) throws OgnlException {
String s="sdf\\a\\aa";
//把s中的反斜杠\ 替换为\\
System.out.println(s);
java replace方法System.out.placeAll("\\\\","\\\\\\\\"));
System.out.place("\\","\\\\"));
}
可以看出上⾯两种都返回相同的替换结果。
这⾥的关键是placeAll()是⽤regular expression 来作为参数的。但是java本⾝的字符串对于转义符\也有类似的处理。⾸先,java会把“\\\\”解释成⼀个字符串(其中包含两个char)。接下来,由于replaceAll是以正则表达式作为参数,所以“\\”被解释成⼀个regex。对于⼀个regex来说这就代表着⼀个字符,就是“\”。对后⾯的那个8个\来说,最终会被解释成“\\”。
换⾔之,假设placeAll()是以普通字符串,⽽不是regex作为参数,那么这样写代码: String target = placeAll('\\','\\\\'); 就可以了。
ava replaceAll() ⽅法要⽤ 4 个反斜杠,表⽰⼀个反斜杠
例如  str1="aa\bbb"; str2="aa'bbb";
要想替换成 str1="aa\\bbb";str2="aa\'bbb";
必须这样替换:
str1 = placeAll("\\\\", "\\\\\\\\");
str2 = placeAll("'", "\\\\'");
原因如下:
String 的 replaceAll()⽅法,实际是采⽤正则表达式的规则去匹配的,
\\\\  ,java解析为\\交给正则表达式,正则表达式再经过⼀次转换,把\\转换成为\
也就是java⾥⾯要⽤正则来表⽰⼀个\. 必须写成4个\
如果要表⽰\\,那就要写8个\
所以如果写成: str1 = placeAll("\\", "\\\\");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。