首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

这个,是缺少转义符还是Java的Bug?解决方案

2012-02-07 
这个,是缺少转义符还是Java的Bug?Java codepublic class MyTest {public static void main(String[] args)

这个,是缺少转义符还是Java的Bug?

Java code
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);            }}




Java code
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,怎么想都不明白,以为是汉字编码问题,追了半天,竟然是半角括号引起!


那程序该怎么写呢?



[解决办法]
replaceFirst的第一个参数是当做正则表达式的。
[解决办法]
1楼正解,如果你确实要匹配()的话,要将其放入[]中,比如:"[(][)]"
[解决办法]

Java code
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的说明,它是一个正则表达式。
“()”在正则表达式中有特殊的含义,代表一个块。

Java code
str1 = str1.replaceFirst("s()()();","");//就相当于  str1 = str1.replaceFirst("s;","");//因为你块中没有任何东西//同样str1 = str1.replaceFirst("()()();","");//相当于str1 = str1.replaceFirst(";","");//因此,想要得到正确的结果(替换掉“s()()();”的话),这样就可以了str1 = str1.replaceFirst("s\\(\\)\\(\\)\\(\\);","");
[解决办法]
楼上2位(goldenfish1919和katasoft)正解。
[解决办法]
探讨

引用:
无知难道是一件很光彩的事吗?java没有你想象的那么弱智,ok?


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

[解决办法]
探讨
Java没有Bug,只是你对这个方法理解有误!


String java.lang.String.replaceFirst(String regex, String replacement)
看看参数regex的说明,它是一个正则表达式。
“()”在正则表达式中有特殊的含义,代表一个块。


[解决办法]

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

热点排行