[英]Java String.replaceAll doesn't replace a quote with escaped quote
很难用转义报价替换报价。 我有一个字符串,其值为'Foo'bar“foobar”,我试图用转义引号替换bar周围的引号,但它无效。 我快疯了。
s=s.replaceAll("\"","\\\"");
我希望s有'foo \\“bar \\”foobar'的值,但事实并非如此。 有帮助吗?
replaceAll
使用正则表达式 - 其中反斜杠只是转义下一个字符,即使在替换中也是如此。
改为使用replace
,它很好......或者如果你想使用正则表达式形式,你可以在第二个参数中加倍反斜杠:
String after = before.replaceAll("\"", "\\\\\"");
如果您需要使用正则表达式匹配输入,这可能很有用,但我强烈建议您使用非正则表单形式,除非您确实需要正则表达式行为。
就个人而言,我认为String
方法使用正则表达式开始是错误的 - 像foo.split(".")
类的东西会分裂在每个字符而不是句点上,完全出乎意料地对于那些不知情的开发人员。
使用s = s.replace("\\"", "\\\\\\"");
,这是非正则表达式版本。
你需要转义两个替换所有参数,因为它们是正则表达式!
@Test
public void testReplace() {
assertEquals("foo\\\"bar\\\"",
"foo\"bar\"".replaceAll("\\\"", "\\\\\\\""));
}
因此,如果你想写"
你需要逃避正则表达式 - > \\"
但因为你在java中,你需要逃避\\
和"
for java to,所以你得到\\\\\\\\"
。 (即搜索参数)。
对于替换参数,您希望在regex中使用\\"
- >: \\\\\\"
- >在Java \\\\\\\\\\\\\\"
s=s.replaceAll("\"","\\\\\"");
但你真的应该使用replace(...)
作为其他人的建议。
采用;
s=s.replaceAll("\"","\\\\\"");
String str = "'Foo \"Bar\" Bar'";
System.out.println(str);
System.out.println(str.replaceAll("\"", "\\\\\""));
请按照以下程序使用> s.replace(“/"."//”);
public class stringbackslash {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="\";
s=s.replace("\", "\\");
System.out.println(s);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.