这样吧
public static void main(String[] args) {
String fname = "b[1].jpg";
fname = fname.replace("[", "\\[").replace("]","\\]");
String text = "file\\a.jpg|file\\b[1].jpg|file\\c.jpg";
text = text.replaceAll("file\\\\" + fname + "\\|", "");
System.out.println(text);
}

解决方案 »

  1.   

    或者直接用replacetext = text.replace("file\\" + fname + "|", "");
    不过这样有多个的话只能替换掉一个
      

  2.   


    上面说了,这里只是测试实例啊,不是单单解决这个问题,要解决这系列问题,fname是个变量,我这里值为b[1].jpg,实际上各种值都可能有,如:b(1).jpg,b(1)(2)[1][3][sss(.jpg,等等,甚至还有$%{}^等等字符,有没个通用的解决方法呢?
      

  3.   

    你实际上市想把fname当成正则表达式去替换,这样的话,你就必须把所有的正则元字符替换成加\进行转义的。要么你就补用正则,用|分割你这个字符串,遍历,进行重新拼接
      

  4.   

    你实际上市想把fname当成正则表达式去替换,这样的话,你就必须把所有的正则元字符替换成加\进行转义的。要么你就补用正则,用|分割你这个字符串,遍历,进行重新拼接
    如果把所有的正则字符都转义过去,也确实够麻烦的了,看来貌似没有更好的办法了(不用正则,要得多写代码)
      

  5.   

    可以用这样一句话把你要替换元字符给替换掉
    fname = fname.replaceAll("([\\[\\]()])", "\\\\$1");
      

  6.   

    哪里不可行,不是该替换的都替换了么 String fname = "b[1](2)[.jpg";
    fname = fname.replaceAll("([\\[\\]()])", "\\\\$1");
    System.out.println(fname);