当前位置: 首页 > 编程笔记 >

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

郗唯
2023-03-14
本文向大家介绍Java split 分隔空值无法得到的解决方式,包括了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 分隔空值无法得到的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍JavaScript中无法通过div.style.left获取值的解决方法,包括了JavaScript中无法通过div.style.left获取值的解决方法的使用技巧和注意事项,需要的朋友参考一下 一、问题总结:     样式必须直接写在元素内部才能通过div.style.left直接获取属性值(也就是必须是内联样式才行),定义在css中的样式不能通过这种方式获取。    让元素移动

  • 本文向大家介绍无法找到脚本文件adsutil.vbs的解决方法,包括了无法找到脚本文件adsutil.vbs的解决方法的使用技巧和注意事项,需要的朋友参考一下 adsutil.vbs是什么,详细请参阅adsutil.vbs脚本基本用法。 adsutil.vbs是Windows 2003的IIS服务自带的基于命令行下的IIS管理脚本,windows 2003使用IIS6.0,现在的IIS7.0、7.

  • 本文向大家介绍Ubuntu无法联网的解决方法,包括了Ubuntu无法联网的解决方法的使用技巧和注意事项,需要的朋友参考一下 问题描述: 使用的是台式机,使用校园网通过有线的方式上网,测试过64位Ubuntu14.04.4、Ubuntu14.04.5和Ubuntu16.04.3均出现了如下问题: 网络显示已经连接,但是无法上网: 这种情况经常出现在一些需要登录网络的场合,如学校等。当然如果不要登录网

  • 本文向大家介绍JQuery 设置checkbox值二次无效的解决方法,包括了JQuery 设置checkbox值二次无效的解决方法的使用技巧和注意事项,需要的朋友参考一下 在此MVC ASP.NET 项目,我利用jquery ajax传输数据给后台controller控制层,返回数据给JQuery数据。 首先必须清除checkbox的选中,因为是ajax的异步操作,是不刷新页面的,所以需要手段充值

  • 问题内容: 我想要一个类属性,该表达式允许在等号的右侧进行表达式。所有版本的PHP都会阻塞以下代码,但是这种编写方式是为了将来更容易扩展。 对我来说,这似乎是非常基本的语法,并且为什么PHP不允许这样的事情是不可理解的。谁能想到可以保持以下代码的可读性和将来可扩展性的解决方法? 问题答案: 在PHP中声明类常量或属性时,只能为默认值指定原始值。因此,例如,该类声明将不起作用: 但是该类声明将: 这

  • 从以前的帖子中,我找到了一种方法来解析这种类型::结构: 这是一个具有键值对的简单 JSON。现在我想解析这个结构,而不管变量顺序如何。即,我想解析到同一个对象中,也是这个结构: 我知道我可以使用操作符来以任何顺序解析数据,但是我不知道如何处理行尾的逗号。我如何解析这两种结构? 这是上一篇文章中@sehe代码。语法在这里定义。