在java中用“\”字符替换字符串

时间:2013-02-15 13:25:48

标签: java regex

我在句子“你是测试”中匹配一个字符串“test”的模式,并用“test”替换它。

StringBuffer sb = new StringBuffer();
Pattern pattern = Pattern.compile("test", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("you are test");
while (matcher.find()) {
matcher.appendReplacement(sb, "test\"));
            }
matcher.appendTail(sb);
replacementString = sb.toString();

问题出在matcher.appendReplacement(sb, "test\"));声明中,其中“\”被视为特殊字符,未执行替换。

请分享您对如何克服此方案以及如何使用字符串中的“\”替换您的想法。

2 个答案:

答案 0 :(得分:6)

要将\放在java中的字符串文字中,您必须将其作为\\转义。

但它有点复杂。请参阅javadoc:

  

请注意替换中的反斜杠(\)和美元符号($)   字符串可能会导致结果与正确的结果不同   作为文字替换字符串处理。可以对待美元符号   作为对如上所述的捕获的子序列的引用,和   反斜杠用于替换替换中的文字字符   字符串。

所以你必须双重逃避:

matcher.appendReplacement(sb, "test\\\\"));

答案 1 :(得分:0)

为什么要使用所有这些代码行,当一行代码执行相同操作时:

String s = input.replaceAll("test", "$0\\\\");

注意使用$0来反向引用整个匹配,并使用双倍反斜杠来创建一个文字正则表达式反斜杠。