繁体   English   中英

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

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

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