【发布时间】:2018-01-19 01:41:16
【问题描述】:
在 Java 中,字符串 "\\" 表示一个反斜杠,第一个反斜杠是转义字符。因此System.out.print("\\") 打印\。但是,如果 "\\" 在方法 replaceAll 中作为 replacement 参数给出,如在 "aba".replaceAll("b", "\\") 中,则会引发以下异常:java.lang.IllegalArgumentException: character to be escaped is missing。
四个斜线就可以了。因此,如果打印"aba".replaceAll("b", "\\\\"),结果是a\a。但是为什么两个斜杠不正确呢?第一个斜线不是转义斜线,第二个斜线不是要转义的字符,就像System.out.print("\\")中的那样吗?请注意,对于传递给 replaceAll 的其他替换字符串,只有一个转义斜杠就足够了。例如。打印"aba".replaceAll("b", "\t") 结果为a a。
注意:我使用的是 Java SE 9。
编辑:建议为重复的一些问题不是重复的。请不要将此与为什么在正则表达式中需要四个反斜杠来匹配单个反斜杠的问题混淆。这不是同一个问题,因为 replaceAll 中的第二个参数显然不是正则表达式。您无法使用正则表达式指定替换字符串,因为最终替换需要解析为文字字符串。
【问题讨论】:
-
当你需要的只是
replace时,为什么要使用replaceAll,它正在使用正则表达式 -
更好的欺骗 --> stackoverflow.com/questions/18875852/…
-
替换不存在该问题。不过,问题并不取决于我的简单正则表达式。您可以使用需要 replaceAll 的更有趣的东西来修改示例。
标签: java replaceall