string:将“(”替换为“\(”

时间:2011-01-23 09:27:27

标签: java regex string bash escaping

我必须向bash发送一个字符串,其中包含一个转义序列。例如,我必须替换特殊字符,如“(”和“(”,因为bash else会抛出错误。我喜欢

public class escape {
    public static void main(String args[]) {
        System.out.println("\\");
        String s = "(foo)";
        System.out.println(s);
        s = s.replaceAll("(", "\\(");
        System.out.println(s);
    }
}
没有运气。请帮忙!!

感谢

4 个答案:

答案 0 :(得分:6)

String.replaceAll使用正则表达式,这不是您想要的。只需使用String.replace

s = s.replace("(", "\\(");

答案 1 :(得分:1)

s = s.replaceAll("\\(", "\\\\(");

答案 2 :(得分:0)

这是因为(根据regexp语法(由replaceAll使用)是一个特殊字符。

在这种情况下,您应该采用Skeet的建议并使用“替换”,但为了让您了解正则表达式版本的工作原理,这里有一个固定的例子:

public class test {
    public static void main(String args[]) {
        System.out.println("\\");
        String s = "(foo)";
        System.out.println(s);
        s = s.replaceAll("\\(", "\\\\(");
        System.out.println(s);
    }
}

答案 3 :(得分:0)

查看所有regexp解决方案(String.replace(CharSequence,CharSequence)也是hoold下的regexp impl。),这里是一段代码,驻留在一个Util类中。 [这就是为什么它仍然使用StringBuffer(旧时代)]

public static String replace(String strToRepl,String orig,String repl){
    if (strToRepl==null) return null;
    int len=strToRepl.length();
    StringBuffer buf=null;

    int ind;
    int origLen=orig.length();
    int start=0;

    while (start<len&&(ind=strToRepl.indexOf(orig,start))>=0){
        if (buf==null) buf=new StringBuffer(len*3/2);
        buf.append(strToRepl.substring(start,ind)).append(repl);
        start=origLen+ind;
    }

    if (buf!=null){
        if (start<len)
            buf.append(strToRepl.substring(start));
        return buf.toString();
    }

    return strToRepl;
}