A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝色骨头 中级黑马   /  2013-4-21 18:20  /  1545 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蓝色骨头 于 2013-4-22 00:12 编辑

                String[] strs = "abc.ef".split(".");
                System.out.println(strs.length);

                String[] strs2 = "abc.ef".split("c");
                System.out.println(strs2.length);

结果为0和2
为什么  各位大神

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

正序浏览
谢谢各位
回复 使用道具 举报
李尧 发表于 2013-4-21 18:34
split方法是正则表达式分割, "."代表任意字符 所以为0.需要转义.

1.因为 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[] strs = "abc.ef".split(".");改为String[] strs = "abc.ef".split("\\.");

2.第二个是用c把字符串分割成2段字符串,两个字符串返回作为字符串数组的两个元素,所以字符串的长度当然为2 了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李尧 于 2013-4-21 20:07 编辑

split方法是正则表达式分割, "."代表任意字符 所以需要转义.
回复 使用道具 举报
"."在正则式里表示任意字符,程序运行的时候,按照每个字符都切了,因为你这里任何字符都符合".",最后字符串数组里面什么都没有。
将程序改为:
String[] strs = "abc.ef".split("\\.");//  这里需要加转义字符才能表示你想要切割的符号
        System.out.println(strs.length);
        
       String[] strs2 = "abc.ef".split("c");
        System.out.println(strs2.length);

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马