为什么replaceAll(" \\ n"," \ n")的行为与replaceAll(" \\",&#34)如此不同; \"?)
我是Scala的新手。我发现:
scala> """\n""" replaceAll("\\\\n", "\n")
res257: String =
"
"
scala> """\n""" replaceAll("\\\\", "\\")
java.lang.IllegalArgumentException: character to be escaped is missing
at java.base/java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1020)
at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:998)
at java.base/java.util.regex.Matcher.replaceAll(Matcher.java:1181)
at java.base/java.lang.String.replaceAll(String.java:2137)
... 28 elided
为什么上述行为如此不同?我的理解是第二次电话 用一个反斜杠替换双反斜杠,但为什么第二次调用在第一次调用时崩溃 成功?
答案 0 :(得分:1)
“要转义的字符缺失”指的是 \ x 的 x 部分。测试用例中的替换字符串仅包含 \ 部分。因此,此方法需要 \\ 来创建 \ 文字。
您可以在那里进行更改并运行它:
scala> """\n""" replaceAll("\\\\", "\\\\")
res2: String = \n