Java CSV文件解析不会解析末尾的空列

Java CSV文件解析不会解析末尾的空列,java,csv,Java,Csv,我正在分析一个CSV文件,但是有一行是空的,最后9列是空的,用逗号分割的字符串忽略了剩余的空列 下面是演示这一点的代码: String s="L2,,,,,,,,,,,,,,,,,,108.50,-188.04,,,,,,,,,"; String[] columns = s.split(","); System.out.println(columns.length); 列的大小是20,而它应该是29。有什么想法吗?斯普利特的文件说: 如果n为零,则该模式将应用尽可能多的次数 可能的话,数组可以

我正在分析一个CSV文件,但是有一行是空的,最后9列是空的,用逗号分割的字符串忽略了剩余的空列

下面是演示这一点的代码:

String s="L2,,,,,,,,,,,,,,,,,,108.50,-188.04,,,,,,,,,";
String[] columns = s.split(",");
System.out.println(columns.length);

列的大小是20,而它应该是29。有什么想法吗?

斯普利特的文件说:

如果n为零,则该模式将应用尽可能多的次数 可能的话,数组可以有任何长度,尾随空字符串 将被丢弃

split(String regex)
调用重载的
split
方法,限制为0。这就是为什么数组长度为20,结果数组中会丢弃-188.04之后的所有空字符串

如果您想要得到所有空的尾随字符串,您可以给出一个负限制,表示您希望尽可能多地应用该模式

String[] columns = s.split(",", -1); //length is 29 there

虽然解析CSV并不困难,但您也可能希望了解如何使用CSV解析器。

查看文档了解:

该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串

因此,您需要查看

limit参数控制应用阵列的次数,因此会影响结果阵列的长度。如果限制n大于零,则模式最多应用n-1次,数组长度不大于n,数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入如果n为非正,则图案将尽可能多次应用,且阵列可以具有任意长度。如果n为零,则将尽可能多次应用该模式,数组可以有任何长度,并且将丢弃尾随的空字符串

我的

你需要:

String[] columns = s.split(",", -1);

为什么您要手动执行实际CSV解析库的工作?试图在适当的工作上省吃俭用是没有好处的,因为有一些好的选择


这些还将处理CSV的一些方面,如双引号、额外空白的处理等等。

非常感谢您的快速响应和回答。这就成功了;)