我正在尝试将其String \something\转换为String \\something\\使用replaceAll,但我不断遇到各种错误.我认为这是解决方案:
theString.replaceAll("\\", "\\\\");
Run Code Online (Sandbox Code Playgroud)
但这给出了以下例外:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
Run Code Online (Sandbox Code Playgroud) 我最近注意到,当涉及转义字符"\"(斜杠)时,String.replaceAll(正则表达式,替换)表现得非常奇怪.
例如,考虑有一个与文件路径字符串- String text = "E:\\dummypath"
我们要替换的"\\"用"/".
text.replace("\\","/")给出输出"E:/dummypath",然后text.replaceAll("\\","/")引发异常java.util.regex.PatternSyntaxException.
如果我们想要实现相同的功能,replaceAll()我们需要将其编写为,
text.replaceAll("\\\\","/")
一个值得注意的区别是replaceAll()它的参数是reg-ex而replace()有参数字符序列!
但text.replaceAll("\n","/")其作用与其char序列完全相同text.replace("\n","/")
深入挖掘: 当我们尝试其他一些输入时,可以观察到更奇怪的行为.
让我们分配 text="Hello\nWorld\n"
现在
text.replaceAll("\n","/"),text.replaceAll("\\n","/"),text.replaceAll("\\\n","/")这三个提供同样的输出Hello/World/
Java以我认为最好的方式搞砸了reg-ex!没有其他语言似乎在reg-ex中具有这些有趣的行为.任何特定的原因,为什么Java搞砸了这样?