在java中用'\'替换'\\'字符串

时间:2013-03-13 11:40:37

标签: java regex

您好我们有一个像"ami\\303\\261o"这样的字符串。我们希望将\\替换为\

我们尝试过以下方法:

  1. replace("\\", "\")
  2. replaceAll("\\", "\")
  3. 但我们没有得到正确的输出。

5 个答案:

答案 0 :(得分:3)

要在Java正则表达式中使用,您需要两次转义反斜杠:

resultString = subjectString.replaceAll("\\\\\\\\", "\\\\");
  1. 在正则表达式中,\\表示“字面反斜杠”。
  2. 在Java字符串中,"\\"对单个反斜杠进行编码。
  3. 因此,描述与单个反斜杠匹配的正则表达式的Java字符串为"\\\\"
  4. 如果你想匹配两个反斜杠,那么它就是"\\\\\\\\"

答案 1 :(得分:3)

你必须记住反斜杠逃避。使用

public class so {
    public static void main(String[] args) {
        String s = "ami\\\\303\\\\261o";
        System.out.println(s);
        s = s.replace("\\\\", "\\");
        System.out.println(s);
    }
};

每个反斜杠都会转义以下反斜杠并解析为两个文字字符串\\\

另请注意,String.replace会返回修改后的字符串并保持原始字符串不变。

答案 2 :(得分:3)

这里不需要正则表达式。转义斜杠并使用replace()

someString.replace('\\\\', '\\');

答案 3 :(得分:0)

这是因为输入字符串中的\\由于Java Escape Character而被\内部替换为"ami\303\261o"。 这意味着如果输出String而不对其执行任何正则表达式,它将如下所示:\ -> escaped = \\ \\ -> escaped = \\\\ \\\ -> escaped = \\\\\\ ...and so on

一般来说,你应该记得自己逃避每个转义字符:

{{1}}

答案 4 :(得分:0)

尝试以下代码

 String val = "ami\\303\\261o"; 
    val =val.replaceAll("\\\\", "\\\\");        
    System.out.println(val);

Outpout将是

  

AMI \ 303 \ 261o

这里创建了一个小提琴,请查看

Java Running Example