解决split无法得到空字符串问题
发布日期:2021-06-28 19:37:32 浏览次数:2 分类:技术文章

本文共 915 字,大约阅读时间需要 3 分钟。

一.问题

在一次分割字符串的时候,出现了如下问题:

无法分割出空字符串,但当末尾位带了非空字符串又能分割了,如下图:

二.定位分析

1.空字符串不被解析

2.最后一个分隔符被分的字符串不为空时,其余空字符串可被解析

源码分析

该方法的作用是:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。

             regularExpression:必选项。要被分解的 String 对象或文字,该对象不会被split方法修改。
                   limit:
            可选项。字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 
            参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃

PS:当limit=0;作用相同

当为0时:

当为2时:

当为6时:

当为8时:由于只有五个逗号,最多只能分割成6个字符串,即使你限定至多8个也只能输出6个

三.解决方案

实际开发的时候不能保证最后一个分隔符被分的字符串为不空,所以在用split()这个方法后再取被分隔的字符串数组的时候有时候就出现数据越界的问题(最后一个分隔符被分的字符串为空)想到了一个方法是split([separator,[limit]]) ,后面把limit赋值成比该字符串被分隔成字符数组后数组的长度大很多的值,这能保证所有为空的都能被解析,这正应了api里的解释

如果把limit设置为非正,也能全部解析如

四.注意

1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split(".");

2、如果用“|”作为分隔的话,必须是如下写法,String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");

 

转载地址:https://blog.csdn.net/xxdw1992/article/details/111149708 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:安卓崩溃日志写入文件中
下一篇:URLDecoder和URLEncoder详解

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月26日 01时10分02秒