我正在try 使用分隔符拆分值.

String data = "5|6|7||8|9||";
String[] split = data.split("\\|");
System.out.println(split.length);

我希望得到8个值.[5,6,7,EMPTY,8,9,EMPTY,EMPTY]个 但是我只得到了6个值.

任何 idea 以及如何修复.不管空值在任何地方出现,它都应该在数组中.

推荐答案

默认情况下,split(delimiter)将从结果数组中删除尾随的空字符串.要关闭这个机制,我们需要使用split(delimiter, limit)的重载版本,将limit设置为负值,如

String[] split = data.split("\\|", -1);

Little more details:
split(regex) internally returns result of split(regex, 0) and in documentation of this method you can find (emphasis mine)

limit参数控制应用数组的次数,因此会影响生成数组的长度.

如果限制ngreater than zero,则模式最多应用n-1次,数组长度将不大于n,数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入.

如果nnon-positive,则将尽可能多次应用图案,并且数组可以具有任意长度.

如果nzero,则图案将被应用尽可能多的次数,数组可以具有任意长度,并且为trailing empty strings will be discarded.

Exception:

It is worth mentioning that removing trailing empty string makes sense only if such empty strings were created by the split mechanism. So for "".split(anything) since we can't split "" farther we will get as result [""] array.
It happens because split didn't happen here, so "" despite being empty and trailing represents original string, not empty string which was created by splitting process.

Java相关问答推荐

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

解析Javadoc时链接的全限定类名

JVM会优化这个数学运算吗?

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

是否在允许数组元素为空时阻止 idea 为空性警告?

如何创建同一类的另一个对象,该对象位于变量中?

如何确定springboot在将json字段转换为Dto时如何处理它?

通过Spring Security公开Spring Boot执行器端点

类型集合的Jackson JsonNode:类型引用的对象读取器应该是Singleton吗?

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

在Java中将int[]矩阵添加到ArrayList中,但出现错误

如何在Java中为thunk创建映射器函数

从Spring6中的JPMS模块读取类时出现问题

如何根据配置动态创建N个bean

如何在SWT菜单项文本中保留@字符

Java中的一个错误';s stdlib SocksSocketImpl?

当我try 返回可选时,Mock无法正常工作

转换为JSON字符串时,日期按天递减-Java

Swagger.io OpenApi v3.0 声明默认媒体类型