我必须向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);
}
}
没有运气。请帮忙!!
感谢
答案 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;
}