[英]Why does String.replaceAll() need so many escapes for " character?
如果我有字符串a"b"c"
,但是我想得到a\\"b\\"c\\"
,我自然会写
String t = "a\"b\"c\"";
t = t.replaceAll("\"", "\\\"");
但是,结果是相同的字符串a"b"c"
正确的方法是
t.replaceAll("\"", "\\\\\"");
为什么?
replaceAll
对模式和替换都使用正则表达式-两者都需要转义反斜杠。 因此,您想要第二个参数的正则表达式替换模式是:
\\"
现在,由于Java字符串文字中的 \\
和"
也都需要转义,这意味着这些字符中的每个字符都需要一个额外的反斜杠。添加引号,您将获得:
"\\\\\""
这就是您的资料来源。
如果只使用不使用正则表达式的String.replace
, 则更为简单。 这样,您仅尝试提供此字符串(而不是字符串文字)作为第二个参数:
\"
转义并转换为字符串文字后,将变为:
"\\\""
仍然不是很好,但是至少更好。
一种替代方法是使用replaceAll
但使用Matcher.quoteReplacement
:
t = t.replaceAll("\"", Matcher.quoteReplacement("\\\""));
我个人只是使用replace()
。 毕竟,您不希望使用正则表达式替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.