如果我有字符串a"b"c"
,但我想获得a\"b\"c\"
,我自然会写
String t = "a\"b\"c\"";
t = t.replaceAll("\"", "\\\"");
但是,这会产生相同的字符串a"b"c"
。正确的方法是
t.replaceAll("\"", "\\\\\"");
为什么?
答案 0 :(得分:7)
replaceAll
对模式和替换使用正则表达式 - 两者都需要转义反斜杠。因此,第二个参数所需的正则表达式替换模式是:
\\"
现在因为 Java字符串文字中的\
和"
也需要转义,这意味着每个字符都需要额外的反斜杠。添加引号,你就得到了:
"\\\\\""
这就是你的来源。
如果您只使用不使用正则表达式的String.replace
,则会更简单。这样你只是试图提供这个字符串(不是字符串文字)作为第二个参数:
\"
转义并转换为字符串文字后,变为:
"\\\""
仍然不是很好,但它至少更好。
另一种方法是使用replaceAll
,但使用Matcher.quoteReplacement
:
t = t.replaceAll("\"", Matcher.quoteReplacement("\\\""));
我个人只是使用replace()
。毕竟,你想要正则表达式替换。