2

嗨,我们有一个像"ami\\303\\261o". 我们要替换\\\.

我们尝试了以下方法:

  1. replace("\\", "\")
  2. replaceAll("\\", "\")

但是我们没有得到正确的输出。

4

5 回答 5

3

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

someString.replace('\\\\', '\\');
于 2013-03-13T11:50:55.503 回答
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返回修改后的字符串并保持原始字符串不变。

于 2013-03-13T11:44:33.690 回答
3

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

resultString = subjectString.replaceAll("\\\\\\\\", "\\\\");
  1. 在正则表达式中,\\表示“文字反斜杠”。
  2. 在 Java 字符串中,"\\"对单个反斜杠进行编码。
  3. 因此,描述匹配单个反斜杠的正则表达式的 Java 字符串是"\\\\"
  4. 如果您想匹配两个反斜杠,则"\\\\\\\\"相应地是 。
于 2013-03-13T11:44:09.637 回答
0

那是因为\\您的输入 String 内部\由于Java Escape Character而在内部被替换。
这意味着如果你输出你的字符串而不对其执行任何正则表达式,它看起来像这样"ami\303\261o"

通常,您应该记住使用自身转义每个转义字符:

\ -> escaped = \\  
\\ -> escaped = \\\\  
\\\ -> escaped = \\\\\\  
...and so on  
于 2013-03-13T11:52:21.157 回答
0

试试下面的代码

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

输出将是

亲\303\261o

在这里创建了一个 Fiddle 检查它

Java 运行示例

于 2013-03-13T11:53:57.327 回答