Java 字符串之String.split()方法产生的数组长度和期望值不一样的探究?

来源:互联网 发布:淘宝上店铺获取失败 编辑:程序博客网 时间:2024/05/22 05:24

先看下面的方法,事先预测一下,经过split方法,按逗号进行分割为数组之后,生成的数组的长度是多少,目测很多人都觉得是7,但是结果却出乎意料。是4而不是7.

    private static void testSplit() {        String ss = "aa,sas,sasa,sasas,,,";        String[] array = ss.split(",");        System.out.println(array.length);//结果是4,而不是预想中的7        for (int i = 0; i < array.length; i++) {            System.out.println(array[i]);        }    }


然后就是正儿八经的运行结果图:

可以看到,结果真的是4而不是我们猜的7,这是为什么呢?


原因解析:

点进去看源码,debug一下,如下图:



可以看到,刚刚开始的时候,确实是有7个分割出来的东西存在,有三个是空字符串,""。不是null。不用担心空指针异常。

然后 看到下面的继续走,if语句,就看到,他把这个list从尾部开始判断,如果这个list的后面的字符串的长度是0,那么这个resultSize就 减减,然后一直while循环,

知道不符合条件,那么list的下标是456的值就被抛弃了,然后新生的结果字符串数组,的大小就变成加工过后的长度,那么就变成了长度 4的数组。

list.subList(0, resultSize).toArray(result)

就是这句话啦。


他只是处理后面尾部的空字符串,不处理中间的空字符串。

知道这个原理之后,那么这个 问题以后怎么变,你都了然于胸啦。


1 0
原创粉丝点击