java学习笔记之String.Split方法

 hello 你们好,很久不见,今天 咱们要讨论的是java的split方法,或许你很早就知道了,但你真的知道吗?java

 咱们来看看吧。数组

首先咱们来看看咱们最经常使用的split()方法也就是单个参数的方法测试

public String[] split(String regex) {
      return split(regex, 0);
}

卧槽,这不是重载方法嘛,调用的是另一个方法,并且还给了个默认值0,而后咱们来看看重载的哪一个方法this

public String[] split(String regex, int limit) {
    // Try fast splitting without allocating Pattern object
        String[] fast = Pattern.fastSplit(regex, this,limit);
        if (fast != null) {
            return fast;
        }
        return Pattern.compile(regex).split(this, limit);
}

???这一串啥东西,无论了,既然这个方法的重载到此,咱们就看看这个最底层的方法怎么用的吧spa

int limit?这是啥?如下为API解释code

limit 参数控制模式应用的次数,所以影响所得数组的长度。若是该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,并且数组的最后一项将包含全部超出最后匹配的定界符的输入。若是 n 为非正,那么模式将被应用尽量多的次数,并且数组能够是任何长度。若是 n 为 0,那么模式将被应用尽量多的次数,数组能够是任何长度,而且结尾空字符串将被丢弃。blog

是否是有点活在本身世界的说法,没办法本身来试呗。字符串

 注意:下面的测试请注意测试字符串的变化it

1.默认方法测试,上面的代码能够看出,默认方法limit只是传的0而已。

废话不说,咱们来上手测试 (注意咱们的测试字符串最后一个逗号后面是空的ast

String str = "1,2,4,5,6,7,";
String[] strArr = str.split(",");
        
for(String s: strArr){
    System.out.println("分割:"+s);
}
System.out.println("数组长度:" + strArr.length);

输出结果:

分割:1
分割:2
分割:4
分割:5
分割:6
分割:7
数组长度:6

测试结果:按照理论分割的话,那么最后一个“,”后面的空不是也应该也被分割出来嘛,可是发现测试结果最后一个空格被去掉了,那么是省去了吗?

                  1.去掉最后一个空格不分割。

既然这样,那我拿多个空格在后面能去掉吗?

来测试

 

        String str = "1,2,4,5,6,7,,,";
        String[] strArr = str.split(",");
        
        for(String s: strArr){
            System.out.println("分割:"+s);
        }
        System.out.println("数组长度:" + strArr.length);

 

 

 

输出结果:

 

分割:1
分割:2
分割:4
分割:5
分割:6
分割:7
数组长度:6

 

 

 

测试结果:看来limit为0 时 分割的最后若是是空格,那么不管多少个空格都会被去掉

其余猜测:1.若中间出现空格会去掉吗? (如: 1,2,3,,4,5,6,7)

                  2.若开头出现空格会去掉吗? (如:,,1,2,3,4,5,6,7)

我就不贴代码了:1.中间的不会去掉空格,空格也会做为一个字符串存入分割后的数组中。

                             2.开头的空格也不会去掉,也作保留。

结论:当limit == 0 时,只有存在最后的空格会被去掉,其余的在中间和前面的都不会被去掉。

 

2.当limit > 0时 测试开始。

        String str = "1,2,4,5,6,7";
        String[] strArr = str.split(",",5);
        
        for(String s: strArr){
            System.out.println("分割:"+s);
        }
        System.out.println("数组长度:" + strArr.length);

 

输出结果

分割:1
分割:2
分割:4
分割:5
分割:6,7
数组长度:5

 

What ?   最后一个分割冒出了一个 "6,7" ?????啥玩意啊?

别急咱们来看,这里的分割的个数是否是等于limit的填的数量?

果真 limit 等于 分割个数  那这个就简单了

测试结果:limit等于你要分割的份数。

其余猜测:1.若是limit > 最大分割的份数(好比 “1,2,3,4,5,6,7”最大的分割实际上是7份,大于最大分割也就是大于7)会怎么样呢?

                  2.若是limit 是小数怎么办?  

结论:1.若是大于也只会按照最大的分割数分割。

           2.limit是整型,不能使用小数

 

2.当limit < 0时 测试开始。

 

        String str = "1,2,4,5,6,7,";
        String[] strArr = str.split(",",-1);
        
        for(String s: strArr){
            System.out.println("分割:"+s);
        }
        System.out.println("数组长度:" + strArr.length);

 

 输出结果:

分割:1
分割:2
分割:4
分割:5
分割:6
分割:7
分割:
数组长度:7

 

 哈哈看到了有意思的了,最后一个空格他没有屏蔽

后面也不买关子了

结论:若是limit为负数,就不会去掉任何分割后的字符,至于 -1 和-2 有什么区别,我如今还不能了解。

相关文章
相关标签/搜索