黑马程序员技术交流社区

标题: 字符串切割"."的疑问 [打印本页]

作者: 张承富    时间: 2013-6-15 18:03
标题: 字符串切割"."的疑问
  1. public class StringTest
  2. {
  3.         public static void main(String[] args){
  4.                 String s="aaa.bbb.ccc.txt";
  5.                 String[] s1=s.split(".");
  6.                 sys(s1==null);
  7.                 if(s1!=null ){
  8.                         sys(s1[0]);
  9.                 }
  10.         }

  11.         public static void sys(Object o){
  12.                 System.out.println(o);
  13.         }
  14. }
复制代码
为什么不能用spilt切割"."
作者: 孙金鑫    时间: 2013-6-15 18:21
String[] split(String regex)
          根据给定正则表达式的匹配拆分此字符串。

“.”这里的是点,所以要用反义字符\\,如  String[] s1=s.split("\\.");就可以了。
如果是“.”就是正则表达式中的“.”代表任意字符了。。。。
作者: 金辉    时间: 2013-6-15 18:28
split中当使用"+"、"?"、"\"、"*"、"^"、"."等特殊字符分割字符串时,若不进行特殊字符的转义,将得不到正确的结果,有些还会报错。
API中的描述,public String[]  spilt(String regex),从参数名即可看出,方法传入的参数不是任意的字符串,而是正则表达式,
spilt方法实质上是调用的matcher类的spilt方法,而"+"、"?"、"\"、"*"、"^"、"."、"$"等这些字符在正则表达式中都有特殊的意义,
使用的时候需要对其进行转义
作者: Heart    时间: 2013-6-15 18:47
没有对特殊字符“.”进行转义,反斜杠\是转义字符,所以可以通过\把特殊字符“.”转义为普通的字符“.”;
但是反斜杠“\”也是一个特殊字符,也要对其进行转义,所以要再加一个\,
最后String[] s1=s.split("\\.");就可以了。
作者: 杜光    时间: 2013-6-15 20:01
  1. public class Test
  2. {
  3.         public static void main(String[] args)
  4.          {   
  5.             String s="ab.cd.ef.gh.ij";
  6.             String[] ss=s.split("\\.");
  7.             System.out.println(ss.length);
  8.         }
  9. }
复制代码
public string[] split(string regex)
这里的参数的名称是 regex ,也就是 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,看下split 方法的实现代码你就明白了:

public string[] split(string regex, int limit) {
return pattern.compile(regex).split(this, limit);
}
split 的实现直接调用的 matcher 类的 split 的方法。读者已经知道,“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。
只要将
String[] stings = stings.split(".");
改为
String[] stings = stings.split("\\.");
就可以了。
作者: 孙百鑫    时间: 2013-6-22 01:22
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2