Java';s String.split()删除尾随的空项

Java';s String.split()删除尾随的空项,java,split,Java,Split,我正在尝试分析一些以管道分隔的记录。我有这个密码: public class Test { public static void main(String[] args) throws Exception { String[] components = "EN|1056209|||KA3NDL|L|||||||||||||||||||||".split("\\|"); System.out.println(java.util.Arrays.toString(

我正在尝试分析一些以管道分隔的记录。我有这个密码:

public class Test {
    public static void main(String[] args) throws Exception {
        String[] components = "EN|1056209|||KA3NDL|L|||||||||||||||||||||".split("\\|");
        System.out.println(java.util.Arrays.toString(components));
    }
}
您希望它能够打印:

[EN, 1056209, , , KA3NDL, L, , , , , , , , , , , , , , , , , , , , , ]
但事实并非如此。它打印:

[EN, 1056209, , , KA3NDL, L]
访问
components
数组的
length
属性表明该数组打印正确

有人知道为什么这是一个解决办法吗

编辑:

这项工作:

public class Test {
    public static void main(String[] args) throws Exception {
        String[] components = "EN|1056209|||KA3NDL|L|||||||||||||||||||||".split("\\|", -1);
        System.out.println(java.util.Arrays.toString(components));
    }
}
如果没有limit参数,则从结果数组中删除所有尾随的空
字符串。您需要包括一个限制:

String str = "EN|1056209|||KA3NDL|L|||||||||||||||||||||";
String[] components = str.split("\\|", -1);
发件人:

如果n为非正,则图案将被应用尽可能多的次数,并且阵列可以具有任意长度。如果n为零,则将尽可能多次应用该模式,数组可以有任何长度,并且将丢弃尾随的空字符串


调用
String.split(String)
相当于调用限制为0的双参数
split

使用双参数版本的
split()
。它允许您配置是否也应返回空字符串。

您可以对该方法传递限制,以便保留尾随的空字符串:

"EN|1056209|||KA3NDL|L|||||||||||||||||||||".split("\\|", -1)
在优秀的番石榴图书馆中查看:

String input = "EN|1056209|||KA3NDL|L|||||||||||||||||||||";
Iterable<String> splitIter = Splitter.on("|").split(input);
System.out.println(splitIter);

我不希望它打印出你希望它打印的东西-管道之间绝对没有任何东西。AnthonyGrist,谢谢,我去仔细阅读了文档并找到了答案。尼克,你为什么不自己写一个答案,而不是以非标准的方式编辑问题及其标题?你甚至可以接受它(延迟之后)。
[EN, 1056209, , , KA3NDL, L, , , , , , , , , , , , , , , , , , , , , ]