【发布时间】:2013-10-23 13:46:14
【问题描述】:
我刚刚浪费了 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);
}
注意第二行只有一个反斜杠,而不是第一行的两个反斜杠
【问题讨论】:
-
是的,我在看到问题后阅读了文档并发现了有关 Matcher.quoteReplacement 的信息,但这并不能解释至少对我来说这似乎违反en.wikipedia.org/wiki/Principle_of_least_astonishment :(