为什么我需要四个反斜杠(\
)来向String
添加一个反斜杠?
String replacedValue = neName.replaceAll(",", "\\\\,");
在上面的代码中,您可以检查我必须替换,
中的所有逗号(\,
),但我必须再添加三个反斜杠(\
)?
有人可以解释这个概念吗?
答案 0 :(得分:4)
为Java退出一次,为regexp第二次。
\
- > \\
- > \\\\
或者,由于您实际上并未使用正则表达式,请提出khelwood
的建议并使用replace(String,String)
,这样您只需要转义一次。
答案 1 :(得分:3)
String.replaceAll(regex, replacement)
州的文件:
请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll。
Matcher.replaceAll(replacement)
的文档然后说明:
反斜杠用于替换替换字符串中的文字字符
因此,为了更清楚地说明,当您使用\,
替换时,就好像您正在逃避逗号。但你想要的是\
字符,所以你应该用\\,
来逃避它。由于在Java中,\
也需要进行转义,替换字符串变为\\\\,
。
如果您很难记住所有这些,可以使用Matcher.quoteReplacement(s)
方法,其目标是正确地逃避替换部分。您的代码将成为:
String replacedValue = neName.replaceAll(",", Matcher.quoteReplacement("\\,"));
答案 2 :(得分:1)
你必须首先转义反斜杠,因为它是一个文字(给\\
),然后因为正则表达式(给出\\\\
)再次转义它。
因此 -
String replacedValue = neName.replaceAll(",", "\\\\,"); // you need ////
您可以使用replace
代替replaceAll
-
String replacedValue = neName.replace(",", "\\,");
答案 3 :(得分:1)
\
用于转义序列
例如
\n
或\r
\t
\
,这是字符串文字中的特殊内容,您必须使用另一个\
来转义\\
现在replaceAll
应与正则表达式一起使用,因为您没有使用正则表达式,请按照评论中的建议使用replace
。
String s = neName.replace(",", "\\,");