public class MyTest 
{
public static void main(String[] args)
{
String str1="s()()();s()()();s()()();s()()();";
str1 = str1.replaceFirst("s()()();","");
str1 = str1.replaceFirst("s()()();","");
str1 = str1.replaceFirst("s()()();","");
str1 = str1.replaceFirst("s()()();","");
System.out.println(str1);

}
}public class MyTest 
{
public static void main(String[] args)
{
String str1="()()();()()();()()();()()();";
str1 = str1.replaceFirst("()()();","");
str1 = str1.replaceFirst("()()();","");
str1 = str1.replaceFirst("()()();","");
str1 = str1.replaceFirst("()()();","");
System.out.println(str1);

}
}
这两个运行结果,完全出乎意料
今天下午我们的程序被告知有BUG,怎么想都不明白,以为是汉字编码问题,追了半天,竟然是半角括号引起!
那程序该怎么写呢?

解决方案 »

  1.   

    replaceFirst的第一个参数是当做正则表达式的。
      

  2.   

    String str1="s()()();s()()();s()()();s()()();";
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("s()()();"),"");
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("s()()();"),"");
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("s()()();"),"");
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("s()()();"),"");
    System.out.println(str1);
    String str1="()()();()()();()()();()()();";
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("()()();"),"");
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("()()();"),"");
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("()()();"),"");
    str1 = str1.replaceFirst(java.util.regex.Pattern.quote("()()();"),"");
    System.out.println(str1);无知难道是一件很光彩的事吗?java没有你想象的那么弱智,ok?
      

  3.   

    Java没有Bug,只是你对这个方法理解有误!
    String java.lang.String.replaceFirst(String regex, String replacement)
    看看参数regex的说明,它是一个正则表达式。
    “()”在正则表达式中有特殊的含义,代表一个块。
    str1 = str1.replaceFirst("s()()();","");
    //就相当于  
    str1 = str1.replaceFirst("s;","");
    //因为你块中没有任何东西//同样
    str1 = str1.replaceFirst("()()();","");
    //相当于
    str1 = str1.replaceFirst(";","");//因此,想要得到正确的结果(替换掉“s()()();”的话),这样就可以了
    str1 = str1.replaceFirst("s\\(\\)\\(\\)\\(\\);",""); 
      

  4.   


    我一开始就在问是否我缺少转义符还是什么,我也并不了解在java中()竟然有这么特殊的意义,所以我才来问的!
      

  5.   

    楼上2位(goldenfish1919和katasoft)正解。
      

  6.   

    ()括号的特殊意义不是Java赋予的,而是正则表达式赋予的。只要是使用正则表达式的地方,括号的意义都是如此。
      

  7.   


    虽说java不是百分百没BUG,但至少没有那么简单被发现