一尘不染

Java字符串拆分删除空值

java

我试图使用分隔符拆分值。但是我发现了令人惊讶的结果

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个值。

任何想法以及如何解决。无论EMPTY值在何处,它都应该位于数组中。


阅读 862

收藏
2020-02-26

共1个答案

一尘不染

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

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

更多细节:
split(regex)内部返回该方法的结果,你可以split(regex, 0)在此方法的文档中找到(强调我的)

limit参数控制应用图案的次数,因此会影响所得数组的长度。

如果限制n是大于零,则该模式将最多n应用- 1次,数组的长度将不会大于n,并且数组的最后项将包含超出最后匹配的定界符的所有输入。

如果n是的非正则模式将被应用多次可能的,并且阵列可以具有任意长度。

如果n IS 零则模式将被应用的次数成为可能,该阵列可具有任何长度,并且拖尾空字符串将被丢弃。

例外情况:

值得一提的是,只有在拆分机制创建了这种空字符串的情况下,删除尾随的空字符串才有意义。因此,"".split(anything)因为我们不能""进一步分割,所以将得到结果[""]数组。
发生这种情况是因为此处未发生拆分,所以""尽管为空,但尾随表示原始字符串,而不是拆分过程创建的空字符串。

2020-02-26