在String中,split方法如下:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/57/wKiom1V5V4vB-UifAABPIVl1KsA500.jpg" style="float:none;" title="string0.png" alt="wKiom1V5V4vB-UifAABPIVl1KsA500.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/53/wKioL1V5WTKw1LVgAABipXk0ufk248.jpg" style="float:none;" title="string1.png" alt="wKioL1V5WTKw1LVgAABipXk0ufk248.jpg" /> 可見,split的核心在於Pattern.compile(regex).split(this, limit);
Java提供Pattern,Matcher用於支援正則,可以看一個例子:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/57/wKiom1V5WHjQ18udAAEmAHAt7yY052.jpg" title="string3.png" alt="wKiom1V5WHjQ18udAAEmAHAt7yY052.jpg" />
運行結果是: 0,1 || 3,4 |ab| 7,8 |cef| 8,9 || 11,12 |kk| 13,14 |a|
需要注意的是:
通過Pattern給定一個模式(regex),Matcher可以不斷(find)匹配文本,並能找到每 一個匹配上的內容的開始(start),結束(end)索引【結束索引說白了,就是start+匹配 文本的長度】。
subSequence(begin,end)是一個“包頭不包尾”的方法
問題: 在上面的while中,我們能到達的最大的索引處,就是最後一個end,而注意到很有可能 這個end之後還有內容,那麼該如何處理呢? 如果一個正則將文本split成了幾部分,我們只需要一部分呢? 如果分成的部分中有“”Null 字元串,split又是如何處理的?
我們可以帶著這些問題來看看源碼:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/54/wKioL1V5XurQ1CqfAAJMp4wDURg874.jpg" title="string4.png" alt="wKioL1V5XurQ1CqfAAJMp4wDURg874.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/54/wKioL1V5Yt3QNxZ5AAIHWzkZ2QE768.jpg" title="string5.png" alt="wKioL1V5Yt3QNxZ5AAIHWzkZ2QE768.jpg" />
首先來看,limit對matchLimited的影響:
limit < 0 或者 split(regex)等價於split(regex,0) ==> matchLimited:false limit > 0 ==> matchLimited:true
其實,while的意思就是說,如果limit>0的話,matchList只加入有限的內容。 如果整個文本沒有匹配上,那麼返回一個長度為1,內容為其本身的數組。 如果limit為0,那麼會將最後匹配的那些空串刪除掉直至非空串為止在返回結果。
|