在String中,split方法如下:
可见,split的核心在于Pattern.compile(regex).split(this, limit);
Java提供Pattern,Matcher用于支持正则,可以看一个例子:
运行结果是:
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成了几部分,我们只需要一部分呢?
如果分成的部分中有“”空字符串,split又是如何处理的?
我们可以带着这些问题来看看源码:
首先来看,limit对matchLimited的影响:
limit < 0 或者 split(regex)等价于split(regex,0) ==> matchLimited:false
limit > 0 ==> matchLimited:true
其实,while的意思就是说,如果limit>0的话,matchList只加入有限的内容。
如果整个文本没有匹配上,那么返回一个长度为1,内容为其本身的数组。
如果limit为0,那么会将最后匹配的那些空串删除掉直至非空串为止在返回结果。