我试图替换所有“|”通过“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个。这样做的正确方法是什么?
答案 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
时。