java學習筆記之String.Split方法


 hello 大家好,好久不見,今天 我們要討論的是java的split方法,或許你很早就知道了,但你真的知道嗎?

 我們來看看吧。

首先我們來看看我們最常用的split()方法也就是單個參數的方法

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

卧槽,這不是重載方法嘛,調用的是另外一個方法,而且還給了個默認值0,然后我們來看看重載的哪個方法

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);
}

???這一串啥東西,不管了,既然這個方法的重載到此,我們就看看這個最底層的方法怎么用的吧

int limit?這是啥?以下為API解釋

limit 參數控制模式應用的次數,因此影響所得數組的長度。如果該限制 n 大於 0,則模式將被最多應用 n - 1 次,數組的長度將不會大於 n,而且數組的最后一項將包含所有超出最后匹配的定界符的輸入。如果 n 為非正,那么模式將被應用盡可能多的次數,而且數組可以是任何長度。如果 n 為 0,那么模式將被應用盡可能多的次數,數組可以是任何長度,並且結尾空字符串將被丟棄。

是不是有點活在自己世界的說法,沒辦法自己來試唄。

 注意:下面的測試請注意測試字符串的變化

1.默認方法測試,上面的代碼可以看出,默認方法limit只是傳的0而已。

廢話不說,我們來上手測試 (注意我們的測試字符串最后一個逗號后面是空的

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 有什么區別,我現在還不能了解。

 


免責聲明!

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



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