2015-04-03 120 views
2

我解析一个CSV文件,但有一行是最后9列是空的,并且用逗号分隔的字符串忽略剩余的空列。Java CSV文件解析不解析空列在结尾

这里是代码来演示此:

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

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

回答

7

看的文档String.split

此方法仿佛通过与给定表达式和为零的限制参数调用两个参数分割方法。尾随的空字符串因此不包含在结果数组中。

所以你需要看的选项为other split method

限参数控制的被施加图案的次数,并因此影响所得阵列的长度。如果极限值n大于零,那么模式将最多应用n-1次,数组的长度不会大于n,并且数组的最后一项将包含超出最后匹配分隔符的所有输入。 如果n是非正值,那么该模式将尽可能多地应用,并且该数组可以具有任意长度。如果n为零,则模式将尽可能多次应用,数组可以有任意长度,并且尾随的空字符串将被丢弃。

强调我的。

您需要:

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

非常感谢您的快速响应和答复。那就是诀窍;) – Andy 2015-04-03 22:21:30

1

分裂的文档表示:

如果n为零,则该模式将作为 可以被应用为多次,该阵列可具有任何长度,并且尾随空字符串丢弃

split(String regex)为什么你有20个数组长度,所有-188.04后的空字符串所得数组中被丢弃调用重载split法0.That的的限制。

如果你想获得所有空的尾随字符串,你可以给出一个负面的限制,说你想尽可能多地应用这个模式。

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

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

0

你为什么做手工的实际CSV解析库的工作吗?试图剔除适当的工作没有任何好处,因为有几个很好的选择。

这些也将处理像一倍双引号CSV方面,处理额外的空格等等。