java正则表达式陷阱

直接看代码:

publicclass StringSplit{
    publicstaticvoid  mian(String [] args){
       String str = "java.ix?sdcc.dddd";
           //将这个字符串以点好(.)分隔成多个字符
           String[] strArr = str.split(".");
           for(String s : strArr){
              System.out.println(s);
           }
    }  
}

上面程序非常简单,提供了一个包含多个点号(.)的字符串,接着调用String提供的Split()方法,以点号(.)作为分隔符来分隔这个字符串,希望返回该字符串被分割后得到的字符串数组。运行改程序,结果发现程序什么都没有输出。


jdk1.4开始,java的string类提供了split()方法进行字符串分割,jdk1.0原来提供StringTokenizer基本上已经是“历史遗留物”了,读者可不必研究。
⑴String 提供的Split(String regex)方法需要的参数是正则表达式;
⑵ 正则表达式中的点号(.)可以匹配任意字符。


publicclass StringSplit {
   publicstaticvoid main(String[] args){
      String str ="java.ix?sdcc.dddd";
      //将这个字符串以点号(.)分隔成多个字符
      String[] strArr = str.split("\\.");      
        for(String s: strArr){
           System.out.println(s);
        }
   }
}

运行上面的程序就可以看到字符串以点号(.)分隔的结果,这就是需要的结果。由此可见,这并不是java的bug,是对java某些特性账户哦不够精确造成的误解。

下面看在看一个demo

publicclass StringReplace {
       publicstaticvoid mian(String[] args)
       {
           String clazz = "org.com.xxxx.sss.yyyy";
           //使用 replace就此简单
           String path1 = clazz.replace(".","\\");
           System.out.println(path1);
           //使用replaceAll复杂多了
           String path2 = clazz.replaceAll("\\","\\\\");
           System.out.println(path2);
       }
    }

上面程序提供了clazz字符串,然后试图将该字符串中的点号(.)替换成反斜杠(\)。如果程序使用replace方法进行替换,
因为replace()方法的参数只是普通字符串,并不是正则表达式,所以使用clazz.replace(“.”,“\”)即可。
如果使用repalceAll方法进行替换,因为replace()的参数是正则表达式,所以第一个参数需要写作“\.”,
其中\用于生成转义的反斜杠线,第二个参数为“\\”其中前两条斜线生成转义的反斜线,后两条斜线生成要替换的反斜线。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值