开发者

string: replace "(" with "\("

i have to send a string to the bash, which contains an escape sequence. For example, i have to replace special characters like "(" with "(", because the bash else throws errors. I trtied like

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);
    }
}

with no luck. Please help!!

thank开发者_如何学Cs


String.replaceAll uses a regular expression, which isn't what you want here. Just use String.replace:

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


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


This is happening because the ( is a special character according to the regexp syntax (which is used by replaceAll).

You should take Skeet's advice and use "replace" instead in this case, but to give you an idea of how the regexp version works, here's a fixed example:

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);
    }
}


Looking at all regexp solutions (String.replace(CharSequence, CharSequence) is also regexp impl. under the hoold), here a piece of code residing for ages in one of the Util classes. [This is why it still uses StringBuffer (old times)]

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;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜