Java String.replaceAll不替换带有转义引用的引号

fro*_*sty 12 java

很难用转义报价替换报价.我有一个字符串,其值为'Foo'bar"foobar",我试图用转义引号替换bar周围的引号,但它无效.我快疯了.

s=s.replaceAll("\"","\\\"");
Run Code Online (Sandbox Code Playgroud)

我希望s有'foo \"bar \"foobar'的值,但事实并非如此.有帮助吗?

Jon*_*eet 23

replaceAll 使用正则表达式 - 反斜杠只会逃避下一个字符,即使在替换中也是如此.

replace相反,使用它很好......或者如果你想使用正则表达式形式,你可以在第二个参数中加倍反斜杠:

String after = before.replaceAll("\"", "\\\\\"");
Run Code Online (Sandbox Code Playgroud)

如果您需要使用正则表达式匹配输入,这可能很有用,但我强烈建议您使用非正则表单形式,除非您确实需要正则表达式行为.

就我个人而言,我认为String使用正则表达式开始的方法是错误的- 比如foo.split(".")会分散在每个字符而不是句点上的东西,这对于那些粗心的开发人员来说是完全出乎意料的.


Boz*_*zho 11

使用s = s.replace("\"", "\\\"");,这是非正则表达式版本.