对于这个简单的程序......
import java.lang.String;
public class test {
public static void main(String[] argv) {
String s = "Hello <BSLASH>";
String sReplaced = s.replaceAll("<BSLASH>", "\\\\");
System.out.println("s = " + s);
System.out.println("sReplaced = " + sReplaced);
}
}
为什么没有用2个反斜杠替换相等的Hello \\?
$javac test.java
$ java test
s = Hello <BSLASH>
sReplaced = Hello \
答案 0 :(得分:3)
请勿使用replaceAll
,请使用replace
:
String sReplaced = s.replace("<BSLASH>", "\\\\");
replaceAll
采用正则表达式,这不是必需的(这就是\\\\
计算为\
)的原因。
哦,你真的不需要import java.lang.String
- 默认导入String
类。
答案 1 :(得分:2)
由于replaceAll使用正则表达式,它实际上确实将四个斜杠转义为两个,然后反斜杠的转义是另一个反斜杠。
所以你的代码实际上只是\
要用两个反斜杠替换它,它应该是
String sReplaced = s.replaceAll("<BSLASH>", "\\\\\\\\");
答案 2 :(得分:1)
你应该使用总共8个反斜杠来获得2个反斜杠。单反斜杠应该用一个反斜杠转义,反斜杠是一个元字符是正则表达式世界,为了将它视为普通字符,你必须用两个反斜杠再次将其转义。
String sReplaced = s.replaceAll("<BSLASH>", "\\\\\\\\");
答案 3 :(得分:-1)
我还建议使用replace
代替replaceAll
。
我在这里写了一个代码来解决这个问题,并尝试解释如何在java字符串中使用Backslash。
String bs1="\\";
String bs2="\\";
String sReplaced = s.replace("<BSLASH>", bs1.concat(bs2));