最近使用 split 遇到的问题
你是否常常在使用 Java 的字符串 split()
函数,例如字符串简单的分割。
我想大部分人都跟我一样进行简单的分割,也没有发现什么大问题,示例代码如下:
1 | public static void main(String[] args) { |
但是最近在进行字符串分割的时候,发现想要对下面的字符串进行分割的时候就出现问题了
1 | public static void main(String[] args) { |
得到的 arrs 数组如下:
我们发现,字符串最后的一个 |
之后没有元素,结尾的空字符串被丢弃了。但实际上在我的业务场景空字符也代表一个占位符,需要分割成 8 个元素的数组。
查看了 split 的源码,发现其实它还有一个重载方法
1 | public String[] split(String regex, int limit) { |
如果不想让结尾的空字符串被丢弃,可以这么实现:
1 | public static void main(String[] args) { |
执行效果如下
split(regex) 和 split(regex, limit) 使用知多少
split(regex)方法
- regex:分割的字符串或者正则表达式,根据字符串中的分割符,进行拆分成字符串数组
split(regex, limit)方法
- regex:分割的字符串或者正则表达式
- limit:作用是控制模式应用的次数 (这里的模式理解成:从左往右分割次数即可)
- Limit<0:模式被应用尽可能多的次数
- limit =0:表示模式应用尽可能多的次数,数组可以是任意长度,并且结尾空字符串将被丢弃。
- limit>0:模式将会应用 limit-1 次数组长度不会超过 limit
举例说明:
-
split("6.0|ff129239||frank2019|1||3|",0)
是切割默认模式等同于split("6.0|ff129239||frank2019|1||3|")
结尾分割字符为空不进行进行分割 -
split("6.0|ff129239||frank2019|1||3|",-1)
,limit 参数小于 0 结尾分割字符为空也进行分割 -
split("6.0|ff129239||frank2019|1||3|",3)
,不管字符串有多少个符合分割的分隔符,只会从左到右分成长度为 3 的数组