黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java字符串拆分詳解

Java字符串拆分詳解

更新時間:2020-11-02 17:48:18 來源:動力節(jié)點(diǎn) 瀏覽1224次


說到 Java 字符串拆分,我們可能會不假思索“這有什么難的,直接上 String 類的 split() 方法不就行了!”假如你真的這么覺得,那可要真的是大錯特錯了。其中緣由,且聽我細(xì)細(xì)道來。


假如現(xiàn)在有這樣一串字符“hello world,一個有趣的程序”,需要按照中文的逗號“,”進(jìn)行拆分,這意味著第一串字符為逗號前面的“hello world”,第二串字符為逗號后面的“一個有趣的程序”。另外,在拆分之前,要先進(jìn)行檢查,判斷一下這串字符是否包含逗號,否則應(yīng)該拋出異常。

public class Test {

public static void main(String[] args) {

String cmower = "hello world,一個有趣的程序";

if (cmower.contains(",")) {

String [] parts = cmower.split(",");

System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

} else {

throw new IllegalArgumentException("當(dāng)前字符串沒有包含逗號");

}

}

}

這段代碼看起來挺嚴(yán)謹(jǐn)?shù)模瑢Π?程序輸出的結(jié)果完全符合預(yù)期:


第一部分:hello world 第二部分:一個趣的程序員

這是建立在字符串是確定的情況下,最重要的是分隔符是確定的。否則,麻煩就來了。

大約有 12 種英文特殊符號,如果直接拿這些特殊符號替換上面代碼中的分隔符(中文逗號),這段程序在運(yùn)行的時候就會出現(xiàn)以下提到的錯誤。

反斜杠 \(ArrayIndexOutOfBoundsException)

插入符號 ^(同上)

美元符號 $(同上)

逗點(diǎn) .(同上)

豎線 |(正常,沒有出錯)

問號 ?(PatternSyntaxException)

星號 *(同上)

加號 +(同上)

左小括號或者右小括號 ()(同上)

左方括號或者右方括號 [](同上)

左大括號或者右大括號 {}(同上)


看到這,可能有小伙伴會說,“這不是鉆牛角尖嘛”,不不不,做技術(shù)就應(yīng)該秉持嚴(yán)謹(jǐn)?shù)膽B(tài)度,否則,很容易出現(xiàn)致命的錯誤。

那遇到特殊符號該怎么辦呢?上正則表達(dá)式唄。

正則表達(dá)式是一組由字母和符號組成的特殊文本,它可以用來從文本中找出滿足你想要的格式的句子。

解決了心病之后,我們來用英文逗點(diǎn)“.”來替換一下分隔符:

String cmower = "hello world,一個有趣的程序";

if (cmower.contains(".")) {

String [] parts = cmower.split("\\.");

System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

}

在使用 split() 方法的時候,就需要使用正則表達(dá)式 \\. 來替代特殊字符英文逗點(diǎn)“.”了。為什么用兩個反斜杠呢?因?yàn)樗旧砭褪且粋€特殊字符,需要先轉(zhuǎn)義。

也可以使用字符類 [] 來包含英文逗點(diǎn)“.”,它也是一個正則表達(dá)式,用來匹配方括號中包含的任意字符。

cmower.split("[.]");


除此之外, 還可以使用 Pattern 類的 quote() 方法來包裹英文逗點(diǎn)“.”,該方法會返回一個使用 \Q\E 包裹的字符串。

此時,String.split() 方法的使用示例如下所示:

String [] parts = cmower.split(Pattern.quote("."));

當(dāng)通過調(diào)試模式進(jìn)入 String.split() 方法源碼的話,會發(fā)現(xiàn)以下細(xì)節(jié):

return Pattern.compile(regex).split(this, limit);

String 類的 split() 方法調(diào)用了 Pattern 類的 split() 方法。也就意味著,我們字符串拆分有了新的選擇,可以不使用 String 類的 split() 方法了。

public class TestPatternSplit {

/**

* 使用預(yù)編譯功能,提高效率

*/

private static Pattern twopart = Pattern.compile("\\.");

public static void main(String[] args) {

String [] parts = twopart.split("hello world.一個有趣的程序");

System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

}

}


除此之外,還可以使用 Pattern 配合 Matcher 類進(jìn)行字符串拆分,這樣做的好處是可以對要拆分的字符串進(jìn)行一些嚴(yán)格的限制。

由于模式是確定的,所以可以把 Pattern 表達(dá)式放在 main() 方法外面,通過 static 的預(yù)編譯功能提高程序的效率。

不過,使用 Matcher 來匹配一些簡單的字符串時相對比較沉重一些,使用 String 類的 split() 仍然是首選,因?yàn)樵摲椒ㄟ€有其他一些牛逼的功能。

比如說,你想把分隔符包裹在拆分后的字符串的第一部分,可以這樣做:

String cmower = "hello world,一個有趣的程序";

if (cmower.contains(",")) {

String [] parts = cmower.split("(?<=,)");

System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

}


程序輸出的結(jié)果如下所示:

第一部分:hello world, 第二部分:一個有趣的程序

可以看到分隔符“,”包裹在了第一部分,如果希望包裹在第二部分,可以這樣做:

String [] parts = cmower.split("(?=,)");

可能有些小伙伴很好奇,?<= 和 ?= 是什么東東啊?它其實(shí)是正則表達(dá)式中的斷言模式。

另外,假如說字符串中包含了多個分隔符,而我們只需要 2 個的話,還可以這樣做:

String cmower = "hello world,一個有趣的程序,收藏";

if (cmower.contains(",")) {

String [] parts = cmower.split(",", 2);

System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

}

split() 方法可以傳遞 2 個參數(shù),第一個為分隔符,第二個為拆分的字符串個數(shù)。查看該方法源碼的話,你就可以看到以下內(nèi)容:

直接 substring() 到原字符串的末尾,也就是說,第二個分隔符處不再拆分。然后就 break 出循環(huán)了。來看一下程序輸出的結(jié)果:

第一部分:hello world 第二部分:一個有趣的程序,收藏


好了以上就是Java字符串拆分的實(shí)例講解,感興趣的小伙伴可以動動自己的小手,在電腦上敲出代碼實(shí)際運(yùn)行一番。也可以觀看本站的Java基礎(chǔ)教程,學(xué)習(xí)更多的字符串操作。


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 一本大道香蕉久在线不卡视频 | 韩国成人在线视频 | 国产精品视频白浆免费视频 | 午夜国产福利在线 | 欧美aaa级片| 欧美综合第一页 | 天堂网免费视频 | www.四色.com| 免费在线观看一级毛片 | 国产成人小视频在线观看 | 黄色a视频在线观看 | 日韩伦理一区二区 | 天堂在线v| 妞干网免费在线观看 | 3751性欧美视频在线播放 | 真人一级一级特黄高清毛片 | 成人影院天天5g天天爽无毒影院 | 亚洲欧美日韩中文不卡 | 黄色在线视频网 | 欧美亚洲国产一区二区三区 | 99在线看 | 国产欧美在线视频免费 | 亚洲激情在线播放 | 国产草草视频 | 三级黄色片免费 | 久久精品蜜芽亚洲国产a | 8x福利精品第一导航 | 亚洲第一精品夜夜躁人人爽 | 亚洲欧美国产视频 | 国产成人做受免费视频 | 天天插综合| 国产99久9在线视频 国产99视频精品免费观看7 | 第一福利在线导航 | 欧美一区二区三区四区在线观看 | 最近的中文字幕视频完整 | 日韩经典第一页 | 亚洲人成网站看在线播放 | 黄色录像一级毛片 | 欧美成a人片在线观看久 | 黑人黄色毛片 | 成人午夜影视全部免费看 |