Java中的split使用方法詳解
前言
在工作中一直使用split進(jìn)行字串的分隔,但是始終沒有認(rèn)真研究過(guò)該方法,今天在使用該方法時(shí)遇到了一些問(wèn)題,特進(jìn)行學(xué)習(xí)記錄。
遇到的問(wèn)題
在使用“|”作為字串的分隔符的時(shí)候,分隔結(jié)果和預(yù)期不一樣。
方法定義
// 從方法的實(shí)現(xiàn)上, 可以了解split的參數(shù)可以是正則表達(dá)式、任意字符、符號(hào)、數(shù)字、字符串等。
public String[] split(String regex) {
}重點(diǎn)關(guān)注
因?yàn)閟plit方法也支持正則表達(dá)式,而正則表達(dá)式存在特殊字符串的情況,這樣就出現(xiàn)了上述問(wèn)題,所以需要注意下表中的特殊字符。
特殊字符
| 特殊字符 | 說(shuō)明 |
| $ | 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,則 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,請(qǐng)使用 \$。 |
| ( ) | 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,請(qǐng)使用 和和。 |
| * | 匹配前面的子表達(dá)式零次或多次。要匹配 * 字符,請(qǐng)使用 \*。 |
| + | 匹配前面的子表達(dá)式一次或多次。要匹配 + 字符,請(qǐng)使用 \+。 |
| . | 匹配除換行符 \n之外的任何單字符。要匹配 .,請(qǐng)使用 \.。 |
| [ | 標(biāo)記一個(gè)中括號(hào)表達(dá)式的開始。要匹配 [,請(qǐng)使用 \[。 |
| ? | 匹配前面的子表達(dá)式零次或一次,或指明一個(gè)非貪婪限定符。要匹配 ? 字符,請(qǐng)使用 \?。 |
| \ | 將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。例如, ‘n’ 匹配字符 ‘n’。‘\n’ 匹配換行符。序列 ‘\\’ 匹配 ‘\’,而 ‘\(’ 則匹配 ‘(’。 |
| ^ | 匹配輸入字符串的開始位置,除非在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合。要匹配 ^ 字符本身,請(qǐng)使用 \^。 |
| { | 標(biāo)記限定符表達(dá)式的開始。要匹配 {,請(qǐng)使用 \{。 |
| | | 指明兩項(xiàng)之間的一個(gè)選擇。要匹配 |,請(qǐng)使用 \|。 |
示例代碼
// 1.如何使用|進(jìn)行分隔?
String[] a = "a|b|c".split("\\|"); // 執(zhí)行結(jié)果: [a, b, c]
// 2.如何使用.進(jìn)行分隔?
String[] b = "a.b.c".split("\\."); // 執(zhí)行結(jié)果: [a, b, c]
// 3.如何使用正則表達(dá)式進(jìn)行分隔?
// 正則表達(dá)式:\d+表示一個(gè)或多個(gè)數(shù)字
String[] c = "a11b222c3333d".split("\\d+"); // 執(zhí)行結(jié)果: [a, b, c, d]
// 4.如何使用多個(gè)不同的分隔符進(jìn)行分隔?
// 分隔符可以有多個(gè)字符, 它們使用|分隔成左右兩部分, 左右兩邊表達(dá)式之間是"或"的關(guān)系, 匹配左邊或者右邊.
String[] d = "a,b#c@d%%e".split(",|#|@|%%"); // 執(zhí)行結(jié)果: [a, b, c, d, e]高級(jí)進(jìn)階
limit默認(rèn)是0,regex表示正則表達(dá)式,limit用來(lái)參數(shù)控制分隔的次數(shù)。
public String[] split(String regex, int limit) {
}
String[] e = "a@b@c@d@e@".split("@", -1); // 執(zhí)行結(jié)果: [a, b, c, d, e, ]
String[] f = "a@b@c@d@e@".split("@", 0); // 執(zhí)行結(jié)果: [a, b, c, d, e]
String[] g = "a@b@c@d@e@".split("@", 1); // 執(zhí)行結(jié)果: [a@b@c@d@e@]
String[] h = "a@b@c@d@e@".split("@", 2); // 執(zhí)行結(jié)果: [a, b@c@d@e@]
String[] i = "a@b@c@d@e@".split("@", 100); // 執(zhí)行結(jié)果: [a, b, c, d, e, ]
String[] j = "@@@".split("@", 100); // 執(zhí)行結(jié)果: [, , , ]
String[] k = "bo:and:fo".split("o", 100); // 執(zhí)行結(jié)果: [b, :and:f, ]
String[] l = "boo:and:foo".split("o", 100); // 執(zhí)行結(jié)果: [b, , :and:f, , ]
String[] m = "booo:and:fooo".split("o", 0); // 執(zhí)行結(jié)果: [b, , , :and:f]1. 字符串開頭出現(xiàn)分隔符,其余部分正常分隔,開頭會(huì)分隔出一個(gè)空字符串。
2. 分隔符緊挨著,其余部分正常分隔,分隔符之間也會(huì)分隔出一個(gè)空字符串。
3. 字符串末尾出現(xiàn)分隔符,其余部分正常分隔,末尾會(huì)分隔出一個(gè)空字符串,是否丟棄末尾的空格需要判斷l(xiāng)imit的值:
- 如果 limit < 0,匹配到多少次,就分隔多少次,數(shù)組可以是任何長(zhǎng)度,結(jié)尾的空字符串不會(huì)丟棄;
- 如果 limit = 0,匹配到多少次,就分隔多少次,數(shù)組可以是任何長(zhǎng)度,并且結(jié)尾空字符串將被丟棄;
- 如果 limit = 1,不進(jìn)行分隔,直接將字串變成長(zhǎng)度為1的數(shù)組;
- 如果 limit > 1,(從左到右)最多分隔 n - 1 次,數(shù)組的長(zhǎng)度將不會(huì)大于n, 結(jié)尾的空字符串不會(huì)丟棄。
到此這篇關(guān)于Java中的split使用方法詳解的文章就介紹到這了,更多相關(guān)split使用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot實(shí)現(xiàn)根據(jù)條件切換注入不同實(shí)現(xiàn)類的示例代碼
這篇文章主要介紹了Springboot實(shí)現(xiàn)根據(jù)條件切換注入不同實(shí)現(xiàn)類的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
java實(shí)現(xiàn)簡(jiǎn)易五子棋游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Java Web學(xué)習(xí)教程之Hibernate And MyBatis的理解
這篇文章主要給大家介紹了關(guān)于Java Web學(xué)習(xí)教程之Hibernate And MyBatis的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04
pdf2swf+flexpapers實(shí)現(xiàn)類似百度文庫(kù)pdf在線閱讀
這篇文章主要介紹了pdf2swf+flexpapers實(shí)現(xiàn)類似百度文庫(kù)pdf在線閱讀的相關(guān)資料,需要的朋友可以參考下2014-10-10
Java pom.xml parent引用報(bào)錯(cuò)問(wèn)題解決方案
這篇文章主要介紹了Java pom.xml parent引用報(bào)錯(cuò)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
java 同步器SynchronousQueue詳解及實(shí)例
這篇文章主要介紹了java 同步器SynchronousQueue詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05

