Java中字符串split() 的使用方法


先看下面的方法,事先預測一下,經過split方法,按逗號進行分割為數組之后,生成的數組的長度是多少,目測很多人都覺得是8,但是結果卻出乎意料。是5而不是8.

    private static void testSplit() {        String ss = ",aa,bb,cc,dd,,,";        String[] array = ss.split(",");         System.out.println(array.length);//結果是5,而不是預想中的8        for (int i = 0; i < array.length; i++) {            System.out.println(array[i]);        }    }

然后就是正兒八經的運行結果圖:

可以看到,結果真的是5而不是我們猜的8,這是為什么呢?

原因解析:

點進去看源碼,debug一下,如下圖:

可以看到,剛剛開始的時候,確實是有0-7,8個分割出來的東西存在,有三個是空字符串,""。不是null。不用擔心空指針異常。

然后 看到下面的繼續走,if語句,就看到,他把這個list從尾部開始判斷,如果這個list的后面的字符串的長度是0,那么這個resultSize就 減減,然后一直while循環,

直到不符合條件,那么list的下標是5、6、7的值就被拋棄了,然后新生的結果字符串數組,的大小就變成加工過后的長度,那么就變成了長度 5的數組。

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

就是這句話啦。

他只是處理后面尾部的空字符串,不處理中間的空字符串和 開頭的空字符串。

知道這個原理之后,那么這個 問題以后怎么變,你都了然於胸啦。

 

下面是又更新的

(2017/07/13更新)

現在要求字符串

"aa12sas32sasa223sas12as12wqe"//去掉數字,然后弄成數組
"aa,,sas,,sasa,,,,sasas,,,"//去掉逗號,不管幾個逗號,都去掉
"aa  sas sa sa     sas  as  "//去掉空格,也不管幾個,
把他們給分解成數組,同時刨除掉不用的多余信息。

具體實現代碼如下:

    private static void testSplitPlus() {        String ss = "aa12sas32sasa223sas12as12wqe";        String[] array = ss.split("[\\d]+");        System.out.println(Arrays.toString(array));        ss = "aa,,sas,,sasa,,,,sasas,,,";        array = ss.split("[,]+");        System.out.println(Arrays.toString(array));        ss = "aa  sas sa sa     sas  as  ";        array = ss.split("[\\s]+");        System.out.println(Arrays.toString(array));    }

下面再看看這個split的源碼。

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

不知道你看到沒,那個regex,不就是正則表達式的意思嘛?

那就明白了,這個方法是支持正則表達式操作的。那上面的代碼就好解釋啦。

第一個[\\d]+這個解釋就是\\是轉義符,d表示數字,括起來后面的加號表示一個或者多個,那么就可以解釋運行結果啦。

第二個[,]解釋類似,就是逗號出現一次或多次,

第三個,\\s,就是匹配任何空白字符,包括空格、制表符、換頁符等等。等價於 [ \f\n\r\t\v]。
然后下面,看運行結果。

這就是我們要的結果啦。
--------------------- 
作者:李學凱 
來源:CSDN 
原文:https://blog.csdn.net/qq_27093465/article/details/54910323 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM