Java split 分隔空值無法得到的解決方式
應用場景
String s1='A,B,'
將s1 以逗號分隔,轉換成集合 正常的轉換結果如下
[A,B]
逗號后的空不再進行分隔,若想逗號后的空即轉換為三個元素的集合
List<String> list = Arrays.asList(s1.split(',',-1));
只需要在跟個條件后,添加-1 即可 ,轉換的結果如下
[A, B, ]
補充知識:Java Sting類關于split處理空串以及截取最大數(shù)
java的String類中有個split方法,這個是我們經(jīng)常使用到的。
split一共有兩個方法,
①.public String[] split(String regex,int limit)
②. public String[] split(String regex )
先說第一個,有兩個參數(shù),api上的例子:
public String[] split(String regex,int limit)
根據(jù)匹配給定的正則表達式來拆分此字符串。
此方法返回的數(shù)組包含此字符串的每個子字符串,這些子字符串由另一個匹配給定的表達式的子字符串終止或由字符串結束來終止。
數(shù)組中的子字符串按它們在此字符串中的順序排列。如果表達式不匹配輸入的任何部分,則結果數(shù)組只具有一個元素,即此字符串。
limit 參數(shù)控制模式應用的次數(shù),因此影響結果數(shù)組的長度。如果該限制 n 大于 0,則模式將被最多應用 n - 1 次,數(shù)組的長度將不會大于 n,而且數(shù)組的最后項將包含超出最后匹配的定界符的所有輸入。
如果 n 為非正,則模式將被應用盡可能多的次數(shù),而且數(shù)組可以是任意長度。如果 n 為零,則模式將被應用盡可能多的次數(shù),數(shù)組可有任何長度,并且結尾空字符串將被丟棄。
例如,字符串 'boo:and:foo' 使用這些參數(shù)可生成下列結果:
Regex Limit 結果
: 2 { 'boo', 'and:foo' }
: 5 { 'boo', 'and', 'foo' }
:-2 { 'boo', 'and', 'foo' }
o 5 { 'b', '', ':and:f', '', '' }
o -2 { 'b', '', ':and:f', '', '' }
o 0 { 'b', '', ':and:f' }
這種形式的方法調用 str.split(regex, n) 產生與以下表達式完全相同的結果:
Pattern.compile(regex).split(str, n)
參數(shù):
regex - 定界正則表達式
limit - 結果閾值,如上所述
返回:
字符串數(shù)組,根據(jù)給定正則表達式的匹配來拆分此字符串,從而生成此數(shù)組
拋出:
PatternSyntaxException - 如果正則表達式的語法無效
其實上面說的已經(jīng)很詳細了,說到底就是比常用的多了一個limit參數(shù)。但是參數(shù)怎么用。
1.當參數(shù)為整數(shù)的時候,只需要截取前幾個,需要幾個截取幾個,這個不用多說。
String line = 'aa,bb,cc,dd,,,,';
System.out.println(line.split(',',6).length);
輸出結果為6,limit參數(shù)指定幾個,輸出幾個,最多為8個
2.當參數(shù)為零的時候,和split()一樣,截圖盡可能多的字符串(其實不是最多的)。
String line = 'aa,bb,cc,dd,,,,';
System.out.println(line.split(',',0).length);
輸出結果為4
3.當參數(shù)為負的時候,即使后面有空的串,也會輸出到最大
String line = 'aa,bb,cc,dd,,,,';
System.out.println(line.split(',',-1).length);
輸出結果為8
可能大家都看出來了,以逗號切割的一般都是CSV格式的文件,當遇到讀取每一行記錄的時候,不加參數(shù),就會遇到這種情況,讀取不完整,然后CSV數(shù)據(jù)格式驗證的時候,驗證數(shù)據(jù)不合法。
String line = 'aa,bb,cc,dd,,,,'; String mi[] = (line).split(sp); if (mi.length != 8)return;
實際結果 mi.length = 4,所以通不過驗證直接非法數(shù)據(jù)
②其實就是當limit參數(shù)為0的時候獲得的結果,將api的介紹放上來,就不多說了。
public String[] split(String regex)
根據(jù)給定的正則表達式的匹配來拆分此字符串。
該方法的作用就像是使用給定的表達式和限制參數(shù) 0 來調用兩參數(shù) split 方法。因此,結果數(shù)組中不包括結尾空字符串。
例如,字符串 'boo:and:foo' 產生帶有下面這些表達式的結果:
Regex 結果
: { 'boo', 'and', 'foo' }
o { 'b', '', ':and:f' }
參數(shù):
regex - 定界正則表達式
返回:
字符串數(shù)組,根據(jù)給定正則表達式的匹配來拆分此字符串,從而生成此數(shù)組。
拋出:
PatternSyntaxException - 如果正則表達式的語法無效
以上這篇Java split 分隔空值無法得到的解決方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關文章:
1. Python安裝并操作redis實現(xiàn)流程詳解2. 網(wǎng)頁中img圖片使用css實現(xiàn)等比例自動縮放不變形(代碼已測試)3. 部署vue+Springboot前后端分離項目的步驟實現(xiàn)4. Python常用擴展插件使用教程解析5. idea設置自動導入依賴的方法步驟6. AspNetCore&MassTransit Courier實現(xiàn)分布式事務的詳細過程7. vue組件庫的在線主題編輯器的實現(xiàn)思路8. ajax post下載flask文件流以及中文文件名問題9. AJAX實現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺】10. PHP字符串前后字符或空格刪除方法介紹

網(wǎng)公網(wǎng)安備