Java坑錦集一 - split函數(shù)

?split函數(shù)

```

String a = "a,a,a,a"; System.out.println(a.split(",").length); //結(jié)果為4 String a = "a,,,4"; System.out.println(a.split(",").length); //結(jié)果為4 String a = "a,a,,"; System.out.println(a.split(",").length); //結(jié)果為2 String a = "a,a,a,"; System.out.println(a.split(",").length); //結(jié)果為3 String a = ",a,a,a"; System.out.println(a.split(",").length); //結(jié)果為4

```

從以上代碼可以得出:當(dāng)后面的逗號(hào)都為空的時(shí)候,默認(rèn)是沒(méi)有的,split函數(shù)就不會(huì)再進(jìn)行切割了。

split源碼探究

```

public String[] split(CharSequence input [, int limit]) { int index = 0; // 指針 boolean matchLimited = limit > 0; // 是否限制匹配個(gè)數(shù)?

?ArrayListmatchList = new ArrayList(); // 匹配結(jié)果隊(duì)列

? ? Matcher m = matcher(input);? ? ? ? ? ? // 待切割字符(串)匹配對(duì)象,pattern去哪了?

? ? // Add segments before each match found

? ? while(m.find()) {

? ? ? ? if (!matchLimited || matchList.size() < limit - 1) {? // 如果不限制匹配個(gè)數(shù) 或者 當(dāng)前結(jié)果列表的大小小于limit-1

? ? ? ? ? ? String match = input.subSequence(index, m.start()).toString();? // 取子串,(指針位置,分隔串所在的首位)

? ? ? ? ? ? matchList.add(match);? ? ? // 添加進(jìn)結(jié)果集

? ? ? ? ? ? index = m.end();? ? ? ? ? // 移動(dòng)指針

? ? ? ? } else if (matchList.size() == limit - 1) { // last one,即還剩最后一個(gè)名額了

? ? ? ? ? ? String match = input.subSequence(index, input.length()).toString();? // 最后一個(gè)元素從指針取到字符串結(jié)尾

? ? ? ? ? ? matchList.add(match);

? ? ? ? ? ? index = m.end();

? ? ? ? }

? ? }

? ? // If no match was found, return this

? ? if (index == 0)? // 即沒(méi)有切分到的意思吧,返回整一串

? ? ? ? return new String[] {input.toString()};

? ? // Add remaining segment

? ? if (!matchLimited || matchList.size() < limit)? // 如果不限制匹配個(gè)數(shù) 或者 結(jié)果集大小小于限制個(gè)數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 這個(gè)時(shí)候,后面已無(wú)匹配,如__1_1___,取最后一個(gè)1的后面部分

? ? ? ? matchList.add(input.subSequence(index, input.length()).toString());? // 最后一個(gè)元素從指針取到字符串結(jié)尾

? ? // Construct result

? ? int resultSize = matchList.size();

? ? if (limit == 0)

? ? ? ? while (resultSize > 0 && matchList.get(resultSize-1).equals(""))? // 如果結(jié)果集最后的元素是"",一個(gè)一個(gè)地刪除它們

? ? ? ? ? ? resultSize--;

? ? String[] result = new String[resultSize];

? ? return matchList.subList(0, resultSize).toArray(result);

}

```

?特別地,最后的while循環(huán)里,把結(jié)果集的位于最后的""元素刪除了,有人問(wèn)過(guò)“boo:and:foo”用“o”來(lái)分割,為什么結(jié)果是{“b”,"",":and:f"},而不是{"b","",":and:f","",""}的原因所在了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類(lèi): pyspark.sql...
    mpro閱讀 9,911評(píng)論 0 13
  • 有一種痛苦的頂點(diǎn)不是被拘押在旅館里沒(méi)有書(shū)看、沒(méi)有合格的談話(huà)伙伴,而是在被放在外面,感到天地之間同樣的寂寞,面對(duì)和你...
    新生千尋閱讀 99評(píng)論 0 0
  • 5天沒(méi)有寫(xiě)筆記,除了上班以外,還有一些雜事需要處理,主要還是懶。自認(rèn)為并不是一個(gè)自律的人,偏好自律的人是主動(dòng)進(jìn)攻...
    那年我們正值青春閱讀 188評(píng)論 0 0
  • 為你 心亂如麻 夕陽(yáng)遮不住的哀傷 似藍(lán)靄在遠(yuǎn)山飄蕩 凝視那抹晚霞的絢爛 如迷戀你低首含情的羞澀 繾綣朦朧的相遇 溫...
    雪夜花開(kāi)閱讀 343評(píng)論 0 7
  • 改革開(kāi)放四十周年感賦 文\余文學(xué) 卌年改革萬(wàn)民歡,國(guó)富軍強(qiáng)道路寬。 信步九天邀月影,暢游四海戲龍?bào)础?農(nóng)家小...
    閑墨堂主閱讀 658評(píng)論 0 0

友情鏈接更多精彩內(nèi)容