java单斜杠替换双斜杠_将斜杠替换成两个斜杠javareplaceAlljs 正则替换
⽅法正则表达式
由于\在java是escape character,所以出现有\的地⽅我们先做⼀个转换如下,左边是原始输⼊,右边是转义以后的字符串数组(数组的形式更⽅便区分):1, \t -> {\t}
2, \\t -> {\,t}
3, \\\t -> {\, \t}
4, \\\\t -> {\,\,t}第⼀个就是制表符,那么被替换掉可以理解。
第⼆个转义以后虽然不是制表符,但是从字⾯上看来也是制表符,所以正则替换的时候也被替换掉了。
有意思的是第三个,转义以后是⼀个\和⼀个制表符,为什么这个也被替换了? 其实这个是java对正则表达式实现的约定,原⽂如下:
It is an error to use a backslash prior to any alphabetic character that does not denote an escaped construct; these are reserved for future extensions to the regular-expression language. A backslash ma
y be used prior to a non-alphabetic character regardless of whether that character is part of an unescaped construct.
其⼤意就是,⼀个反斜线可以放在任何⼀个non-alphabetic字符之前⽽⽆论这个字符是否是⼀个可以escaped的字符。这⾥,你也可以把\t 换成 \\你 看看输出结果。
第四个转义以后是\,\和t三个字符,那么明显是不满⾜替换条件。
java 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("\\", "\\\\");
就会报正则表达式的错误。
还把有 反斜杠 换成 斜杠
String path="aaa\\bbb";
place("\\", "/");