Java split 分隔空值无法得到的解决方式

网友投稿 450 2022-11-17


Java split 分隔空值无法得到的解决方式

应用场景

String s1="A,B,"

将s1 以逗号分隔,转换成集合 正常的转换结果如下

[A,B]

逗号后的空不再进行分隔,若想逗号后的空即转换为三个元素的集合

List list = Arrays.asList(s1.split(",",-1));

只需要在跟个条件后,添加-1 即可 ,转换的结果如下

[A, B, ]

补充知识:java Sting类关于split处理空串以及截取最大数

java的String类中有个split方法,这个是我们经常使用到的。

split一共有两个方法,

①.public String[] split(String regex,int limit)

②. public String[] split(String regex )

先说第一个,有两个参数,api上的例子:

public String[] split(String regex,int limit)

根据匹配给定的正则表达式来拆分此字符串。

此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。

数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。

limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度http://将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。

如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。

例如,字符串 "boo:and:foo" 使用这些参数可生成下列结果:

Regex Limit 结果

: 2 { "boo", "and:foo" }

: 5 { "boo", "and", "foo" }

:-2 { "boo", "and", "foo" }

o 5 { "b", "", ":and:f", "", "" }

o -2 { "b", "", ":and:f", "", "" }

o 0 { "b", "", ":and:f" }

这种形式的方法调用 str.split(regex, n) 产生与以下表达式完全相同的结果:

Pattern.compile(regex).split(str, n)

参数:

regex - 定界正则表达式

limit - 结果阈值,如上所述

返回:

字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

其实上面说的已经很详细了,说到底就是比常用的多了一个limit参数。但是参数怎么用。

1.当参数为整数的时候,只需要截http://取前几个,需要几个截取几个,这个不用多说。

String line = "aa,bb,cc,dd,,,,";

System.out.println(line.split(",",6).length);

输出结果为6,limit参数指定几个,输出几个,最多为8个

2.当参数为零的时候,和split()一样,截图尽可能多的字符串(其实不是最多的)。

String line = "aa,bb,cc,dd,,,,";

System.out.println(line.split(",",0).length);

输出结果为4

3.当参数为负的时候,即使后面有空的串,也会输出到最大

String line = "aa,bb,cc,dd,,,,";

System.out.println(line.split(",",-1).length);

输出结果为8

可能大家都看出来了,以逗号切割的一般都是CSV格式的文件,当遇到读取每一行记录的时候,不加参数,就会遇到这种情况,读取不完整,然后CSV数据格式验证的时候,验证数据不合法。

String line = "aa,bb,cc,dd,,,,";

String mi[] = (line).split(sp);

if (mi.length != 8)return;

实际结果 mi.length = 4,所以通不过验证直接非法数据

②其实就是当limit参数为0的时候获得的结果,将api的介绍放上来,就不多说了。

public String[] split(String regex)

根据给定的正则表达式的匹配来拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 产生带有下面这些表达式的结果:

Regex 结果

: { "boo", "and", "foo" }

o { "b", "", ":and:f" }

参数:

regex - 定界正则表达式

返回:

字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组。

抛出:

PatternSyntaxException - 如果正则表达式的语法无效


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java calendar 日期实现不断加一天的代码
下一篇:Java实现KFC点餐系统过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~