Java中字符串split()的使用方法,沒你想的那么簡單

先看下面的方法,事先預(yù)測一下,經(jīng)過split方法,按逗號進行分割為數(shù)組之后,生成的數(shù)組的長度是多少,目測很多人都覺得是8,但是結(jié)果卻出乎意料。是5而不是8.

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供溫泉網(wǎng)站建設(shè)、溫泉做網(wǎng)站、溫泉網(wǎng)站設(shè)計、溫泉網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、溫泉企業(yè)網(wǎng)站模板建站服務(wù),10多年溫泉做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(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)的運行結(jié)果圖:

Java中字符串split() 的使用方法,沒你想的那么簡單

可以看到,結(jié)果真的是5而不是我們猜的8,這是為什么呢?

原因解析:

點進去看源碼,debug一下,如下圖:

Java中字符串split() 的使用方法,沒你想的那么簡單

可以看到,剛剛開始的時候,確實是有0-7,8個分割出來的東西存在,有三個是空字符串,""。不是null。不用擔(dān)心空指針異常。

然后 看到下面的繼續(xù)走,if語句,就看到,他把這個list從尾部開始判斷,如果這個list的后面的字符串的長度是0,那么這個resultSize就 減減,然后一直while循環(huán),

直到不符合條件,那么list的下標是5、6、7的值就被拋棄了,然后新生的結(jié)果字符串?dāng)?shù)組,的大小就變成加工過后的長度,那么就變成了長度 5的數(shù)組。

list.subList(0, resultSize).toArray(result)

就是這句話啦。

他只是處理后面尾部的空字符串,不處理中間的空字符串和 開頭的空字符串。

知道這個原理之后,那么這個 問題以后怎么變,你都了然于胸啦。

?

下面是又更新的

現(xiàn)在要求字符串

"aa12sas32sasa223sas12as12wqe"http://去掉數(shù)字,然后弄成數(shù)組

"aa,,sas,,sasa,,,,sasas,,,"http://去掉逗號,不管幾個逗號,都去掉

"aa? sas sa sa? ? ?sas? as? "http://去掉空格,也不管幾個,

把他們給分解成數(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));

? ? }

下面再看看這個split的源碼。

? ? public String[] split(String regex) {

? ? ? ? return split(regex, 0);

? ? }

不知道你看到?jīng)],那個regex,不就是正則表達式的意思嘛?

那就明白了,這個方法是支持正則表達式操作的。那上面的代碼就好解釋啦。

第一個[\\d]+這個解釋就是\\是轉(zhuǎn)義符,d表示數(shù)字,括起來后面的加號表示一個或者多個,那么就可以解釋運行結(jié)果啦。

第二個[,]解釋類似,就是逗號出現(xiàn)一次或多次,

第三個,\\s,就是匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。

然后下面,看運行結(jié)果。

Java中字符串split() 的使用方法,沒你想的那么簡單

這就是我們要的結(jié)果啦。

網(wǎng)站標題:Java中字符串split()的使用方法,沒你想的那么簡單
新聞來源:http://bm7419.com/article12/isgigc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、面包屑導(dǎo)航、網(wǎng)站建設(shè)、定制開發(fā)、小程序開發(fā)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站