Java用反斜杠替换所有

时间:2012-11-27 22:26:28

标签: java escaping

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

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 \

4 个答案:

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