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 有什麼區別,我如今還不能瞭解。

相關文章
相關標籤/搜索