我最近注意到,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会这样搞砸?