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