解決split無法得到空字串問題

ChampionDragon發表於2020-12-14

一.問題

在一次分割字串的時候,出現瞭如下問題:

無法分割出空字串,但當末尾位帶了非空字串又能分割了,如下圖:

二.定位分析

1.空字串不被解析

2.最後一個分隔符被分的字串不為空時,其餘空字串可被解析

原始碼分析

該方法的作用是:將一個字串分割為子字串,然後將結果作為字串陣列返回。


             regularExpression:必選項。要被分解的 String 物件或文字,該物件不會被split方法修改。
                   limit:
            可選項。字串或正規表示式物件,它標識了分隔字串時使用的是一個還是多個字元。如果忽略該選項,返回包含整個字串的單一元素陣列。 
            引數控制模式應用的次數,因此影響所得陣列的長度。如果該限制 n 大於 0,則模式將被最多應用 n - 1 次,陣列的長度將不會大於 n,而且陣列的最後一項將包含所有超出最後匹配的定界符的輸入。如果 n 為非正,那麼模式將被應用盡可能多的次數,而且陣列可以是任何長度。如果 n 為 0,那麼模式將被應用盡可能多的次數,陣列可以是任何長度,並且結尾空字串將被丟棄

PS:當limit=0;作用相同

當為0時:

當為2時:

當為6時:

當為8時:由於自由五個逗號,最多隻能分割成6個字串,即使你限定至多8個也只能輸出6個

三.解決方案

實際開發的時候不能保證最後一個分隔符被分的字串為不空,所以在用split()這個方法後再取被分隔的字串陣列的時候有時候就出現資料越界的問題(最後一個分隔符被分的字串為空)想到了一個方法是split([separator,[limit]]) ,後面把limit賦值成比該字串被分隔成字元陣列後陣列的長度大很多的值,這能保證所有為空的都能被解析,這正應了api裡的解釋

如果把limit設定為非正,也能全部解析如

四.注意

1、如果用“.”作為分隔的話,必須是如下寫法,String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
2、如果用“|”作為分隔的話,必須是如下寫法,String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");

 

相關文章