replaceAll“|”通过java中的“$”

时间:2016-01-21 17:21:03

标签: java replaceall

我试图替换所有“|”通过“2”使用以下代码:

 String myString = "I want to change | with 2";
 String trimedString = myString.replaceAll("|", "2");
 System.out.print(trimedString);

我的预期输出是:

"I want to change | with 2"

但实际输出是:

"2I2 2w2a2n2t2 2t2o2 2c2h2a2n2g2e2 2|2 2w2i2t2h2 222"

在每个char之前和之后添加了2个。这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:5)

您必须在管道符号前插入两个反斜杠才能将其转义。

String myString = "I want to change | with 2";
String trimedString = myString.replaceAll("\\|", "2");
System.out.print(trimedString);

答案 1 :(得分:2)

如果使用replaceAll,则第一个参数将被视为正则表达式。因此,您需要转义|,这是一个正则表达式元字符:

String trimedString = myString.replaceAll("\\|", "2")

或者,您可以使用replace()方法之一代替replaceAll()。它们仍然会替换所有事件,但不使用正则表达式匹配。例如:

String trimedString = myString.replace("|", "2");

将每个参数视为文字字符串。或者,由于您正在进行单字符替换,因此您可以使用:

String trimedString = myString.replace('|', '2');

这将是迄今为止效率最高的。

答案 2 :(得分:0)

您可能是String类中替换方法中使用的命名的另一个受害者。

大多数人介绍这些方法(基于名称的不同),认为replaceAll(target,replacement)replace(target,replacement)的不同之处在于replace不会取代所有出现的目标(因为它没有All后缀)。但事实并非如此,两种方法都将取代所有目标。

他们之间的真正区别在于:

  • replaceAll正在使用正则表达式(正则表达式)语法,有些字符与|一样特殊,因此您需要先将其"\\|"转义$是特殊的替换部分,所以你需要逃避它)
  • replace使用文字。

所以在你的情况下你可以简单地使用

String trimedString = myString.replace("|", "2");

所以

  • 当您看到replaceAll将其视为replaceRegex
  • 当您将replaceFirst的内容视为replaceRegexOnce
  • 当您看到replace将其视为replaceAllLiterals时。