這篇文章主要介紹了String split方法實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),大祥企業(yè)網(wǎng)站建設(shè),大祥品牌網(wǎng)站建設(shè),網(wǎng)站定制,大祥網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,大祥網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
String的split方法相信大家都不陌生,或多或少都用過(guò)它將字符串轉(zhuǎn)成一個(gè)數(shù)組,但是就是這樣一個(gè)簡(jiǎn)單的方法,里面也有一個(gè)不得不注意、不深不淺的小坑。
本地測(cè)試代碼如下圖所示:
圖1
大家會(huì)發(fā)現(xiàn)split1跟split3的長(zhǎng)度符合我們的預(yù)期,但是split2應(yīng)該是長(zhǎng)度為5,但實(shí)際長(zhǎng)度卻仍然為4。相信大家在遇到這種情況的時(shí)候,
應(yīng)該能立馬猜到String的這個(gè)split方法應(yīng)該不只是進(jìn)行一個(gè)匹配拆分的操作,還做了其他的邏輯處理,比如這里應(yīng)該做了去除最后一個(gè)空元素
的操作。既然有了這樣的猜想,那就繼續(xù)看看源碼尋根溯源一下吧。
圖2
該方法調(diào)用了一個(gè)重載的方法,第一個(gè)參數(shù)沒(méi)變,第二個(gè)參數(shù)limit傳了0,繼續(xù)追溯
圖3
卻發(fā)現(xiàn)有點(diǎn)頭大,比較麻煩,完全看不下去了。
換個(gè)思路,debug一下,看看這最后一個(gè)空的元素是在哪里被過(guò)濾掉的,一試果然發(fā)現(xiàn)了案發(fā)地。
圖4
此處的list里存放的是全部的5個(gè)元素,而在下面的while循環(huán)里,可以看到是從尾部往前遍歷看哪個(gè)元素長(zhǎng)度為0,
有一個(gè)為0的就減一個(gè)長(zhǎng)度,直到碰到第一個(gè)不為空的元素為止。進(jìn)行完這個(gè)while循環(huán)之后,就截取前面的元素,
轉(zhuǎn)成數(shù)組返回。
通過(guò)以上的簡(jiǎn)要分析,即可知道,對(duì)于String的split方法,如果字符串末尾剛好是匹配字符,則會(huì)自動(dòng)將最后一個(gè)
空元素去掉,而字符串首部有空元素則不受影響。
多說(shuō)兩句,其實(shí)對(duì)于limit參數(shù),測(cè)試幾次便可發(fā)現(xiàn),此參數(shù)是限制返回的數(shù)據(jù)最大長(zhǎng)度的。測(cè)試代碼如下:
圖5
可知傳了limit值,就不會(huì)自動(dòng)去掉末尾的空元素。具體原因可見(jiàn)圖4源碼,如果limit不為0,則不會(huì)走if中的while循環(huán),也就不會(huì)出現(xiàn)上文中說(shuō)的情況了。
對(duì)于這種坑,沒(méi)什么避免的好辦法,一是擴(kuò)大自己的知識(shí)面,二是多積累總結(jié)。加油吧!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。