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

时间:2015-04-03 22:09:42

标签: java csv

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

以下是演示此内容的代码:

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

列的大小是20,应该是29.任何想法??

3 个答案:

答案 0 :(得分:13)

查看String.split的文档:

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。

因此,您需要查看other split method

的选项
  

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

强调我的。

你需要:

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

答案 1 :(得分:1)

分裂的文档说:

  

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

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

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

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

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

答案 2 :(得分:0)

为什么要手动处理实际的CSV解析库?试图吝啬正常工作是没有好处的,因为那里有一些很好的选择。

这些也可以处理CSV的各个方面,如双引号,处理额外的空格等等。