先看下面的方法,事先预测一下,经过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)
就是这句话啦。
他只是处理后面尾部的空字符串,不处理中间的空字符串。
知道这个原理之后,那么这个 问题以后怎么变,你都了然于胸啦。
新闻热点
疑难解答