相关疑难解决方法(0)

String.replaceAll单反斜杠,带双反斜杠

我正在尝试将其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)

java escaping backslash replaceall

113
推荐指数
4
解决办法
14万
查看次数

为什么java中的String.replaceAll()需要在正则表达式中使用4个斜杠"\\\\"来实际替换"\"?

我最近注意到,当涉及转义字符"\"(斜杠)时,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搞砸了这样?

java regex string escaping charsequence

27
推荐指数
3
解决办法
4万
查看次数

标签 统计

escaping ×2

java ×2

backslash ×1

charsequence ×1

regex ×1

replaceall ×1

string ×1