1

我正在匹配一个模式,它是句子“you are test”中的字符串“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\"));“\”被视为特殊字符并且不执行替换的语句中。

请分享您对如何克服这种情况以及如何用字符串中的“\”替换的想法。

4

2 回答 2

6

要将 a 放入\java 中的字符串文字中,您必须将其转义为\\.

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

请注意,\替换字符串中的反斜杠 ( ) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可以被视为对捕获的子序列的引用,并且反斜杠用于转义替换字符串中的文字字符。

所以你必须双重转义:

matcher.appendReplacement(sb, "test\\\\"));
于 2013-02-15T13:28:15.940 回答
0

当一行代码做同样的事情时,你为什么要使用所有这些代码行:

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

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

于 2013-02-15T13:39:10.157 回答