Java的split方法使用詳解
相信大家都經(jīng)常使用String 的split方法,但是大家有沒有遇到下面的這種情況:
大家想想下面的代碼執(zhí)行結(jié)果是什么
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(","); String[] s3 = str3.split(","); System.out.println("str1長度:"+s1.length); System.out.println("str2長度:"+s2.length); System.out.println("str3長度:"+s3.length); }
執(zhí)行結(jié)果:
為什么會(huì)出現(xiàn)這樣的結(jié)果呢,查找API發(fā)現(xiàn)了解決方法
解決方法:
通過查看API我們發(fā)現(xiàn)我們常用的split方法默認(rèn)傳遞的是0,現(xiàn)在解決str2輸出空的解決方法是傳遞的第二個(gè)參數(shù)為負(fù)數(shù),即可
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(",",-1); String[] s3 = str3.split(",",-1); System.out.println("str1長度:"+s1.length); System.out.println("str2長度:"+s2.length); System.out.println("str3長度:"+s3.length); }
經(jīng)查找API發(fā)現(xiàn)在String類中,存在兩個(gè)split重載方法
1.public String[] split(String regex)
根據(jù)給定正則表達(dá)式的匹配拆分此字符串。
該方法的作用就像是使用給定的表達(dá)式和限制參數(shù) 0 來調(diào)用兩參數(shù) split 方法。因此,所得數(shù)組中不包括結(jié)尾空字符串。
例如,字符串 "boo:and:foo" 使用這些表達(dá)式可生成以下結(jié)果:
Regex 結(jié)果
: { "boo", "and", "foo" } o { "b", "", ":and:f" }
參數(shù):
regex - 定界正則表達(dá)式
返回:
字符串?dāng)?shù)組,它是根據(jù)給定正則表達(dá)式的匹配拆分此字符串確定的
拋出:
PatternSyntaxException - 如果正則表達(dá)式的語法無效
2.public String[] split(String regex,int limit)
根據(jù)匹配給定的正則表達(dá)式來拆分此字符串。
此方法返回的數(shù)組包含此字符串的子字符串,每個(gè)子字符串都由另一個(gè)匹配給定表達(dá)式的子字符串終止,或者由此字符串末尾終止。數(shù)組中的子字符串按它們?cè)诖俗址谐霈F(xiàn)的順序排列。如果表達(dá)式不匹配輸入的任何部分,那么所得數(shù)組只具有一個(gè)元素,即此字符串。
limit 參數(shù)控制模式應(yīng)用的次數(shù),因此影響所得數(shù)組的長度。如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次,數(shù)組的長度將不會(huì)大于 n,而且數(shù)組的最后一項(xiàng)將包含所有超出最后匹配的定界符的輸入。如果 n 為非正,那么模式將被應(yīng)用盡可能多的次數(shù),而且數(shù)組可以是任何長度。如果 n 為 0,那么模式將被應(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) 形式與以下表達(dá)式產(chǎn)生的結(jié)果完全相同:
Pattern.compile(regex).split(str, n)
參數(shù):
regex - 定界正則表達(dá)式
limit - 結(jié)果閾值,如上所述
返回:
字符串?dāng)?shù)組,它是根據(jù)給定正則表達(dá)式的匹配拆分此字符串確定的
拋出:
PatternSyntaxException - 如果正則表達(dá)式的語法無效
相關(guān)文章
java操作elasticsearch詳細(xì)方法總結(jié)
elasticsearch是使用Java編寫的一種開源搜索引擎,也是一種分布式的搜索引擎架構(gòu),這篇文章主要給大家介紹了關(guān)于java操作elasticsearch的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Java使用Hutool執(zhí)行日期的加法和減法操作方法
使用Hutool進(jìn)行日期的加法和減法操作,可以使用`DateUtil.offsetXXX()`方法來實(shí)現(xiàn),這些方法會(huì)返回一個(gè)新的日期,而不是在原日期上進(jìn)行修改,本文給大家介紹Java使用Hutool執(zhí)行日期的加法和減法操作方法,感興趣的朋友一起看看吧2023-11-11Java多線程局域網(wǎng)聊天室的實(shí)現(xiàn)
在學(xué)習(xí)了一個(gè)學(xué)期的java以后,搞了一個(gè)多線程的聊天室,熟悉了一下服務(wù)器和客戶機(jī)的操作。感興趣的小伙伴們可以參考一下2021-06-06springboot使用hibernate validation對(duì)參數(shù)校驗(yàn)的實(shí)現(xiàn)方法
這篇文章主要介紹了spring-boot 使用hibernate validation對(duì)參數(shù)進(jìn)行優(yōu)雅的校驗(yàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12java異常:異常處理--try-catch結(jié)構(gòu)詳解
今天小編就為大家分享一篇關(guān)于Java異常處理之try...catch...finally詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2021-09-09