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
廢話不說,咱們來上手測試 (注意咱們的測試字符串最後一個逗號後面是空的)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 時,只有存在最後的空格會被去掉,其餘的在中間和前面的都不會被去掉。
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是整型,不能使用小數
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 有什麼區別,我如今還不能瞭解。