1

如果我有字符串a"b"c",但我想得到a\"b\"c\",我自然会写

String t = "a\"b\"c\"";
t = t.replaceAll("\"", "\\\"");

但是,这会产生相同的字符串a"b"c". 正确的方法是

t.replaceAll("\"", "\\\\\"");

为什么?

4

1 回答 1

7

replaceAll对模式和替换都使用正则表达式 - 两者都需要转义反斜杠。所以你想要的第二个参数的正则表达式替换模式是:

\\"

现在因为在Java 字符串文字\中也需要转义,这意味着这些字符中的每一个都需要一个额外的反斜杠。添加引号,您将获得:"

"\\\\\""

这就是你在你的源代码中得到的。

如果您只使用String.replacewhich使用正则表达式,它会更简单。这样你只是试图提供这个字符串(不是字符串文字)作为第二个参数:

\"

转义并变成字符串文字后,变为:

"\\\""

这仍然不是很好,但至少更好。

另一种方法是使用replaceAllbut with Matcher.quoteReplacement

t = t.replaceAll("\"", Matcher.quoteReplacement("\\\""));

我个人只是使​​用replace()。毕竟,您不想要正则表达式替换。

于 2013-01-17T21:11:55.423 回答