我最近注意到,String.replaceAll(regex,replacement) 在涉及转义字符“\”(斜杠)时表现得非常奇怪
例如,考虑有一个带有文件路径的字符串 -String text = "E:\\dummypath"
我们想"\\"
用"/"
.
text.replace("\\","/")
给出输出"E:/dummypath"
而text.replaceAll("\\","/")
引发异常java.util.regex.PatternSyntaxException
。
如果我们想实现相同的功能,replaceAll()
我们需要将其编写为,
text.replaceAll("\\\\","/")
一个显着的区别是replaceAll()
它的参数是正则表达式,而replace()
参数是字符序列!
但text.replaceAll("\n","/")
与它的 char-sequence 等价物完全相同text.replace("\n","/")
深入挖掘: 当我们尝试其他一些输入时,可以观察到更奇怪的行为。
让我们分配text="Hello\nWorld\n"
现在,
text.replaceAll("\n","/")
, text.replaceAll("\\n","/")
,text.replaceAll("\\\n","/")
所有这三个都给出相同的输出Hello/World/
Java 真的以我觉得最好的方式搞砸了 reg-ex!似乎没有其他语言在 reg-ex 中有这些有趣的行为。任何具体原因,为什么Java会这样搞砸?