String的split方法,你真的懂嗎

2022-03-17 18:03:22 字數 1149 閱讀 3661

string的split方法相信大家都不陌生,或多或少都用過它將字串轉成乙個陣列,但是就是這樣乙個簡單的方法,裡面也有乙個不得不注意、不深不淺的小坑。

本地測試**如下圖所示:

圖1大家會發現split1跟split3的長度符合我們的預期,但是split2應該是長度為5,但實際長度卻仍然為4。相信大家在遇到這種情況的時候,

應該能立馬猜到string的這個split方法應該不只是進行乙個匹配拆分的操作,還做了其他的邏輯處理,比如這裡應該做了去除最後乙個空元素

的操作。既然有了這樣的猜想,那就繼續看看原始碼尋根溯源一下吧。

圖2該方法呼叫了乙個過載的方法,第乙個引數沒變,第二個引數limit傳了0,繼續追溯

圖3卻發現有點頭大,比較麻煩,完全看不下去了。

換個思路,debug一下,看看這最後乙個空的元素是在**被過濾掉的,一試果然發現了案發地。

圖4此處的list裡存放的是全部的5個元素,而在下面的while迴圈裡,可以看到是從尾部往前遍歷看哪個元素長度為0,

有乙個為0的就減乙個長度,直到碰到第乙個不為空的元素為止。進行完這個while迴圈之後,就擷取前面的元素,

轉成陣列返回。

通過以上的簡要分析,即可知道,對於string的split方法,如果字串末尾剛好是匹配字元,則會自動將最後乙個

空元素去掉,而字串首部有空元素則不受影響。

多說兩句,其實對於limit引數,測試幾次便可發現,此引數是限制返回的資料最大長度的。測試**如下:

圖5可知傳了limit值,就不會自動去掉末尾的空元素。具體原因可見圖4原始碼,如果limit不為0,則不會走if中的while迴圈,也就不會出現上文中說的情況了。

對於這種坑,沒什麼避免的好辦法,一是擴大自己的知識面,二是多積累總結。加油吧!

String類的split方法

雖然使用正規表示式能很好的進行字串的解析 提取 替換,但是對於一些簡單的應用,使用 string 類提供的一些方法就可以很好的完成,最突出的就是 split 方法。split 方法能夠很方便的將字串按照一定的規則拆分開。比如對於下面的字串 tom,jane,tony,elva,gigi 只要呼叫如下...

String神奇的split方法

size medium string的split方法的使用 今天我用的了string的split方法,我起初都是使用的是乙個引數的方法,今天發現有兩個引數的,看了一下api,開始感覺有點蒙,後來看了一下它 的例子,還在網上看了一些資料,後來我就理解了這個。這個函式接收兩個引數,它的宣告是下面的樣子 ...

String類中split方法

string類中split方法 split 你需要分割字串的,分割的總個數 該方法使用正規表示式的底層完成對字串的分割 使用的案例 1 string s women,sksk,k,k,k,k,3 23 4for string s1 s.split 7 該執行結果是 women skskkk kk注意...