关于Java Split命令解析Csv文件

Ara*_*rav 3 java csv split

我有一个以下格式的csv文件.

H,"TestItems_20100107.csv",07/01/2010,20:00:00,"TT1198","MOBb","AMD",NEW,,
Run Code Online (Sandbox Code Playgroud)

我需要split命令忽略双引号内的逗号.所以我在之前的帖子中使用了下面的split命令.粘贴我使用此命令的URL

String items[] = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
System.out.println("items.length"+items.length);
Run Code Online (Sandbox Code Playgroud)

Java:拆分以逗号分隔的字符串,但忽略引号中的逗号

当我运行此CSV数据时,我将items.length打印为8."NEW"之后的行尾的最后两个逗号将被忽略.我希望split命令能够获取这些逗号,然后将长度返回为10.如果它在最后,则不会拾取空逗号,但是如果它位于字符串的中间,它会将其拾取.不确定我需要在split命令中修改什么来解决此问题.同样在csv文件中可以重复文本字段内容中的双引号(例如"此帐户是""大""一")

Mar*_*ers 9

正则表达式没有错.问题是拆分在最后丢弃空匹配:

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

解决方法是提供一个大于CSV文件中所需列数的参数:

 String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99);
Run Code Online (Sandbox Code Playgroud)

  • 实际上,指定-1而不是99不是更好吗?根据文档,0和非正数之间的差异是0"尾随空字符串将被丢弃". (3认同)