为什么replaceAll(" \\\\ n"," \ n")的行为与replaceAll(" \\\\",&# 34; \\&#34)?

时间:2018-04-27 03:15:53

标签: string scala

为什么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

为什么上述行为如此不同?我的理解是第二次电话   用一个反斜杠替换双反斜杠,但为什么第二次调用在第一次调用时崩溃   成功?

1 个答案:

答案 0 :(得分:1)

“要转义的字符缺失”指的是 \ x x 部分。测试用例中的替换字符串仅包含 \ 部分。因此,此方法需要 \\ 来创建 \ 文字。

您可以在那里进行更改并运行它:

scala> """\n""" replaceAll("\\\\", "\\\\")
res2: String = \n