这个,是缺少转义符还是Java的Bug?
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); }}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);
[解决办法]
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\\(\\)\\(\\)\\(\\);","");
[解决办法]
楼上2位(goldenfish1919和katasoft)正解。
[解决办法]