Java split 分隔空值無法得到的解決方式
應(yīng)用場景
String s1="A,B,"
將s1 以逗號(hào)分隔,轉(zhuǎn)換成集合 正常的轉(zhuǎn)換結(jié)果如下
[A,B]
逗號(hào)后的空不再進(jìn)行分隔,若想逗號(hào)后的空即轉(zhuǎn)換為三個(gè)元素的集合
List<String> list = Arrays.asList(s1.split(",",-1));
只需要在跟個(gè)條件后,添加-1 即可 ,轉(zhuǎn)換的結(jié)果如下
[A, B, ]
補(bǔ)充知識(shí):Java Sting類關(guān)于split處理空串以及截取最大數(shù)
java的String類中有個(gè)split方法,這個(gè)是我們經(jīng)常使用到的。
split一共有兩個(gè)方法,
①.public String[] split(String regex,int limit)
②. public String[] split(String regex )
先說第一個(gè),有兩個(gè)參數(shù),api上的例子:
public String[] split(String regex,int limit)
根據(jù)匹配給定的正則表達(dá)式來拆分此字符串。
此方法返回的數(shù)組包含此字符串的每個(gè)子字符串,這些子字符串由另一個(gè)匹配給定的表達(dá)式的子字符串終止或由字符串結(jié)束來終止。
數(shù)組中的子字符串按它們?cè)诖俗址械捻樞蚺帕小H绻磉_(dá)式不匹配輸入的任何部分,則結(jié)果數(shù)組只具有一個(gè)元素,即此字符串。
limit 參數(shù)控制模式應(yīng)用的次數(shù),因此影響結(jié)果數(shù)組的長度。如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次,數(shù)組的長度將不會(huì)大于 n,而且數(shù)組的最后項(xiàng)將包含超出最后匹配的定界符的所有輸入。
如果 n 為非正,則模式將被應(yīng)用盡可能多的次數(shù),而且數(shù)組可以是任意長度。如果 n 為零,則模式將被應(yīng)用盡可能多的次數(shù),數(shù)組可有任何長度,并且結(jié)尾空字符串將被丟棄。
例如,字符串 "boo:and:foo" 使用這些參數(shù)可生成下列結(jié)果:
Regex Limit 結(jié)果
: 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" }
這種形式的方法調(diào)用 str.split(regex, n) 產(chǎn)生與以下表達(dá)式完全相同的結(jié)果:
Pattern.compile(regex).split(str, n)
參數(shù):
regex - 定界正則表達(dá)式
limit - 結(jié)果閾值,如上所述
返回:
字符串?dāng)?shù)組,根據(jù)給定正則表達(dá)式的匹配來拆分此字符串,從而生成此數(shù)組
拋出:
PatternSyntaxException - 如果正則表達(dá)式的語法無效
其實(shí)上面說的已經(jīng)很詳細(xì)了,說到底就是比常用的多了一個(gè)limit參數(shù)。但是參數(shù)怎么用。
1.當(dāng)參數(shù)為整數(shù)的時(shí)候,只需要截取前幾個(gè),需要幾個(gè)截取幾個(gè),這個(gè)不用多說。
String line = "aa,bb,cc,dd,,,,";
System.out.println(line.split(",",6).length);
輸出結(jié)果為6,limit參數(shù)指定幾個(gè),輸出幾個(gè),最多為8個(gè)
2.當(dāng)參數(shù)為零的時(shí)候,和split()一樣,截圖盡可能多的字符串(其實(shí)不是最多的)。
String line = "aa,bb,cc,dd,,,,";
System.out.println(line.split(",",0).length);
輸出結(jié)果為4
3.當(dāng)參數(shù)為負(fù)的時(shí)候,即使后面有空的串,也會(huì)輸出到最大
String line = "aa,bb,cc,dd,,,,";
System.out.println(line.split(",",-1).length);
輸出結(jié)果為8
可能大家都看出來了,以逗號(hào)切割的一般都是CSV格式的文件,當(dāng)遇到讀取每一行記錄的時(shí)候,不加參數(shù),就會(huì)遇到這種情況,讀取不完整,然后CSV數(shù)據(jù)格式驗(yàn)證的時(shí)候,驗(yàn)證數(shù)據(jù)不合法。
String line = "aa,bb,cc,dd,,,,"; String mi[] = (line).split(sp); if (mi.length != 8)return;
實(shí)際結(jié)果 mi.length = 4,所以通不過驗(yàn)證直接非法數(shù)據(jù)
②其實(shí)就是當(dāng)limit參數(shù)為0的時(shí)候獲得的結(jié)果,將api的介紹放上來,就不多說了。
public String[] split(String regex)
根據(jù)給定的正則表達(dá)式的匹配來拆分此字符串。
該方法的作用就像是使用給定的表達(dá)式和限制參數(shù) 0 來調(diào)用兩參數(shù) split 方法。因此,結(jié)果數(shù)組中不包括結(jié)尾空字符串。
例如,字符串 "boo:and:foo" 產(chǎn)生帶有下面這些表達(dá)式的結(jié)果:
Regex 結(jié)果
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
參數(shù):
regex - 定界正則表達(dá)式
返回:
字符串?dāng)?shù)組,根據(jù)給定正則表達(dá)式的匹配來拆分此字符串,從而生成此數(shù)組。
拋出:
PatternSyntaxException - 如果正則表達(dá)式的語法無效
以上這篇Java split 分隔空值無法得到的解決方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們可以參考下。2020-02-02
spring+maven實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了spring+maven實(shí)現(xiàn)發(fā)送郵件功能,利用spring提供的郵件工具來發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
使用VS?Code進(jìn)行java開發(fā)與調(diào)試的圖文教程
這篇文章主要介紹了如何在計(jì)算機(jī)上安裝JDK、VSCode以及Java擴(kuò)展包,并詳細(xì)說明了配置Java運(yùn)行環(huán)境的過程,還展示了如何在VSCode中新建一個(gè)Java項(xiàng)目,需要的朋友可以參考下2025-02-02
SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼
電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實(shí)現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下2022-04-04
Spring Boot配置動(dòng)態(tài)更新問題
這篇文章主要介紹了Spring Boot配置動(dòng)態(tài)更新問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

