java 读取split_Java报错系列——split

在String中,split方法如下:

bed18e972b393eaba18a4dd0764e8011.png

a7c7e82dec80eb473e44d15de003853b.png

可见,split的核心在于Pattern.compile(regex).split(this, limit);

Java提供Pattern,Matcher用于支持正则,可以看一个例子:

24633b667772b93ad1207c4d61bade99.png

运行结果是:

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又是如何处理的?

我们可以带着这些问题来看看源码:

d4cd0a5c2c5c5610be3e96a8dfbacd15.png

d86da84c56bde856d63505f9113c1d43.png

首先来看,limit对matchLimited的影响:

limit < 0 或者 split(regex)等价于split(regex,0)  ==>  matchLimited:false

limit > 0                           ==>  matchLimited:true

其实,while的意思就是说,如果limit>0的话,matchList只加入有限的内容。

如果整个文本没有匹配上,那么返回一个长度为1,内容为其本身的数组。

如果limit为0,那么会将最后匹配的那些空串删除掉直至非空串为止在返回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值