繁体   English   中英

为什么String.replaceAll()的字符需要这么多的转义?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM