我只是失去了1小时来追踪我认为不正常的行为
在String类中使用replaceAll/replaceFirst
。
如果替换字符串中有反斜杠,则在删除时将删除它们
更换。然后我读到你可以使用Matcher.quoteReplacement(String)
来
创建一个合适的替换字符串,但我的问题是为什么?我可以期待
如果不这样做,第一个参数应该使用Patter.quote(String)
进行转义
想要特殊含义,但我没有理由改变替代品:(
是我将开始使用replace(CharSequence,CharSequence),只是想知道原因:)
这是一个清楚显示“奇怪”行为的例子:
public static void main(String[] args) {
String out = "\\\\test\\\\";
System.out.println(out);
String result = "a".replaceAll("a", out);
System.out.println(result);
}
注意第二行是如何仅使用单个反斜杠而不是第一行
中的两个反斜杠答案 0 :(得分:2)
是的,反斜杠需要作为String#replaceAll
中的第一个参数进行双重转义。
<强>原因:强>
这是因为您的替换字符串可以包含back-references
,例如$1
,$2
等,甚至替换文本也由基础regex engine
处理,因此需要正如你也发现的那样,双重逃避与第一个参数相同。
答案 1 :(得分:2)