Java split 分隔空值无法得到的解决方式
应用场景
String s1="A,B,"
将s1 以逗号分隔,转换成集合 正常的转换结果如下
[A,B]
逗号后的空不再进行分隔,若想逗号后的空即转换为三个元素的集合
List<String> 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 次,数组的长度将不会大于 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.当参数为整数的时候,只需要截取前几个,需要几个截取几个,这个不用多说。
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 - 如果正则表达式的语法无效
以上这篇Java split 分隔空值无法得到的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。