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