строка: заменить "(" на "\ (" - PullRequest
2 голосов
/ 23 января 2011

Мне нужно отправить строку в bash, которая содержит escape-последовательность. Например, я должен заменить специальные символы, такие как "(" на "(", потому что 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 ]

6 голосов
/ 23 января 2011

String.replaceAll использует регулярное выражение, которое здесь не то, что вам нужно.Просто используйте String.replace:

s = s.replace("(", "\\(");
1 голос
/ 23 января 2011
s = s.replaceAll("\\(", "\\\\(");
0 голосов
/ 24 января 2011

Рассмотрение всех решений регулярных выражений (String.replace (CharSequence, CharSequence) также подразумевается как регулярное выражение под отверстием), здесь фрагмент кода, который целую вечность находится в одном из классов 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;
}
0 голосов
/ 23 января 2011

Это происходит потому, что (является специальным символом в соответствии с синтаксисом регулярного выражения (который используется 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);
    }
}
...