先看下面的方法,事先預(yù)測(cè)一下,經(jīng)過(guò)split方法,按逗號(hào)進(jìn)行分割為數(shù)組之后,生成的數(shù)組的長(zhǎng)度是多少,目測(cè)很多人都覺(jué)得是8,但是結(jié)果卻出乎意料。是5而不是8.
成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供溫泉網(wǎng)站建設(shè)、溫泉做網(wǎng)站、溫泉網(wǎng)站設(shè)計(jì)、溫泉網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、溫泉企業(yè)網(wǎng)站模板建站服務(wù),10多年溫泉做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
? ? private static void testSplit() {
? ? ? ? String ss = ",aa,bb,cc,dd,,,";
? ? ? ? String[] array = ss.split(",");
?
? ? ? ? System.out.println(array.length);//結(jié)果是5,而不是預(yù)想中的8
? ? ? ? for (int i = 0; i < array.length; i++) {
? ? ? ? ? ? System.out.println(array[i]);
? ? ? ? }
? ? }
然后就是正兒八經(jīng)的運(yùn)行結(jié)果圖:
可以看到,結(jié)果真的是5而不是我們猜的8,這是為什么呢?
原因解析:
點(diǎn)進(jìn)去看源碼,debug一下,如下圖:
可以看到,剛剛開(kāi)始的時(shí)候,確實(shí)是有0-7,8個(gè)分割出來(lái)的東西存在,有三個(gè)是空字符串,""。不是null。不用擔(dān)心空指針異常。
然后 看到下面的繼續(xù)走,if語(yǔ)句,就看到,他把這個(gè)list從尾部開(kāi)始判斷,如果這個(gè)list的后面的字符串的長(zhǎng)度是0,那么這個(gè)resultSize就 減減,然后一直while循環(huán),
直到不符合條件,那么list的下標(biāo)是5、6、7的值就被拋棄了,然后新生的結(jié)果字符串?dāng)?shù)組,的大小就變成加工過(guò)后的長(zhǎng)度,那么就變成了長(zhǎng)度 5的數(shù)組。
list.subList(0, resultSize).toArray(result)
就是這句話啦。
他只是處理后面尾部的空字符串,不處理中間的空字符串和 開(kāi)頭的空字符串。
知道這個(gè)原理之后,那么這個(gè) 問(wèn)題以后怎么變,你都了然于胸啦。
?
下面是又更新的
現(xiàn)在要求字符串
"aa12sas32sasa223sas12as12wqe"http://去掉數(shù)字,然后弄成數(shù)組
"aa,,sas,,sasa,,,,sasas,,,"http://去掉逗號(hào),不管幾個(gè)逗號(hào),都去掉
"aa? sas sa sa? ? ?sas? as? "http://去掉空格,也不管幾個(gè),
把他們給分解成數(shù)組,同時(shí)刨除掉不用的多余信息。
具體實(shí)現(xiàn)代碼如下:
? ? private static void testSplitPlus() {
? ? ? ? String ss = "aa12sas32sasa223sas12as12wqe";
? ? ? ? String[] array = ss.split("[\\d]+");
? ? ? ? System.out.println(Arrays.toString(array));
? ? ? ? ss = "aa,,sas,,sasa,,,,sasas,,,";
? ? ? ? array = ss.split("[,]+");
? ? ? ? System.out.println(Arrays.toString(array));
? ? ? ? ss = "aa? sas sa sa? ? ?sas? as? ";
? ? ? ? array = ss.split("[\\s]+");
? ? ? ? System.out.println(Arrays.toString(array));
? ? }
下面再看看這個(gè)split的源碼。
? ? public String[] split(String regex) {
? ? ? ? return split(regex, 0);
? ? }
不知道你看到?jīng)],那個(gè)regex,不就是正則表達(dá)式的意思嘛?
那就明白了,這個(gè)方法是支持正則表達(dá)式操作的。那上面的代碼就好解釋啦。
第一個(gè)[\\d]+這個(gè)解釋就是\\是轉(zhuǎn)義符,d表示數(shù)字,括起來(lái)后面的加號(hào)表示一個(gè)或者多個(gè),那么就可以解釋運(yùn)行結(jié)果啦。
第二個(gè)[,]解釋類(lèi)似,就是逗號(hào)出現(xiàn)一次或多次,
第三個(gè),\\s,就是匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。等價(jià)于 [ \f\n\r\t\v]。
然后下面,看運(yùn)行結(jié)果。
這就是我們要的結(jié)果啦。
網(wǎng)站標(biāo)題:Java中字符串split()的使用方法,沒(méi)你想的那么簡(jiǎn)單
新聞來(lái)源:http://m.newbst.com/article12/isgigc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、面包屑導(dǎo)航、網(wǎng)站建設(shè)、定制開(kāi)發(fā)、小程序開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)