2

对于这个简单的程序...

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);

    }
}

为什么 sReplaced 不等于带有 2 个反斜杠的 Hello \\ ?

$javac test.java
$ java test
s = Hello <BSLASH>
sReplaced = Hello \
4

4 回答 4

3

不要replaceAll为此使用,请使用replace

String sReplaced = s.replace("<BSLASH>", "\\\\");

replaceAll接受一个正则表达式,这在此处不是必需的(这就是\\\\计算结果为 的原因\)。

哦,你真的不需要import java.lang.String-String默认情况下导入该类。

于 2012-11-27T22:29:52.343 回答
2

由于 replaceAll 使用正则表达式,它实际上确实将四个斜杠转义为两个,然后反斜杠的转义是另一个反斜杠。

所以你的代码实际上只是 \

用两个反斜杠替换它,它应该是

String sReplaced = s.replaceAll("<BSLASH>", "\\\\\\\\");
于 2012-11-27T22:29:22.950 回答
1

you should use total of 8 backslash's to get 2 backslashes. single backslash should be escaped with one backslash,backslash is a meta character is regex world, in-order to consider it as a normal character you will have to escape it againwith two backslash's.

 String sReplaced = s.replaceAll("<BSLASH>", "\\\\\\\\");
于 2012-11-27T22:27:47.127 回答
-1

我也建议replace改用replaceAll. 我在这里写了一个代码来解决这个问题,并尝试解释如何在 java 字符串中使用反斜杠。

String bs1="\\";
String bs2="\\";
String sReplaced = s.replace("<BSLASH>", bs1.concat(bs2));
于 2012-11-27T22:44:27.983 回答