首页 > 解决方案 > 字符串 split() 删除尾随的空条目

问题描述

我正在使用 split() 来收集字符串中句点之间的值。如果用户输入尾随句点,则 split() 不会将这些句点作为空字符串返回,而是删除它们:

String[] parts = "a.b.c...d...e".split("\\.");
   for ( int i = 0; i < parts.length; i++ )
       System.out.println("" + i + ": '" + parts[i] + "'" );

0: 'a'
1: 'b'
2: 'c'
3: ''
4: ''
5: 'd'
6: ''
7: ''
8: 'e'

删除最后一个'e':

String[] parts = "a.b.c...d...".split("\\.");
   for ( int i = 0; i < parts.length; i++ )
       System.out.println("" + i + ": '" + parts[i] + "'" );


0: 'a'
1: 'b'
2: 'c'
3: ''
4: ''
5: 'd'

第 6 部分和第 7 部分发生了什么?似乎 split() 只是放弃了它们。然而,它们存在于字符串中。split() 不应该将第 6 部分和第 7 部分作为空字符串返回吗?

标签: java

解决方案


请参阅javadoc

此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数拆分方法一样。因此,尾随的空字符串不包含在结果数组中。

所以它的行为符合定义。如果您对此不满意,您可以按照手册的建议进行操作,并使用负参数进行限制。

String[] parts = "a.b.c...d...".split("\\.", -1);
for ( int i = 0; i < parts.length; i++ )
   System.out.println("" + i + ": '" + parts[i] + "'" );

0: 'a'
1: 'b'
2: 'c'
3: ''
4: ''
5: 'd'
6: ''
7: ''
8: ''

推荐阅读