我要去掉一个指定字符串(str1) 中的指定字符(str2),以前一直用str1.replaceFirst(str2,"");今天遇到了 str2中包含“[”的问题,就报错了。。比如:
String str1 = "[电影天堂]红楼梦";
String str2 = "[电影天堂]";
str1.replaceFirst(str2,""); //不行
str1.replaceFirst(str2.replaceAll("\\u005B","\\u005B"),""); //也不行
str1.replaceFirst(str2.replaceAll("\\u005B","\\\\\\\\u005B"),""); //也不行
str1.replaceFirst(str2.replaceAll("\\u005B","\\u005C\\u005Cu005B"),""); //也不行
求解释!

解决方案 »

  1.   

    加了那么多\\干啥。。str1 = str1.replaceFirst(str2.replaceAll("\\[", "\\\\[").replaceAll("\\]", "\\\\]"),"");
      

  2.   

    已经关了Eclipse了,明天来了试试。。
      

  3.   

    不要那样处理,因为正则元字符很多,你不可能每个都单独处理的,而且你并不知道字符串中会有哪些元字符
    Pattern类中提供了转义方法String str1 = "[电影天堂]红楼梦";
    String str2 = "[电影天堂]";
    str1 = str1.replaceFirst(Pattern.quote(str2),"");   
    System.out.println(str1);
      

  4.   


    public class Test {
    public static void main(String[] args) {
    String str1 = "[电影天堂]红楼梦";
    String str2 = "\\[电影天堂\\]";
    str1 = str1.replaceFirst(str2,"");
    System.out.println(str1);
    }
    }这样就行了啊,为什么要那么麻烦呢!
      

  5.   

    也可以用replace来替换,非正则替换String str1 = "[电影天堂]红楼梦";
    String str2 = "[电影天堂]";
    System.out.println(str1.replace(str2,"")); //不支持正则的替换,当然也就不担心转义
      

  6.   

    很好,很强大,记住了,谢谢高手指点!顺便说一下,我记得用StringBuffer应该也可以吧?
      

  7.   

    用StringBuffer应该也可以,但不知道是否偏离了你的问题。记得老师说过如果要修改String的话最好用StringBuffer。StringBuffer sb=new StringBuffer("[电影天堂]红楼梦");
         sb.replace(0, 6, "");
         System.out.println(sb);
      

  8.   

    Pattern.quote 确实很不错!、
      

  9.   

    学习了,原来CharSequence是个接口,并且String实现了它,以前真不知道
      

  10.   

    回复8楼,13楼,str1,str2是指定字符串。。也就是用户输入的!! 如果知道字符串是什么,我直接用String str = "红楼梦";了,还替换个鸟毛