CSV解析时跳过空行

时间:2015-12-05 18:30:27

标签: java csv

我目前正在处理从URL中提取CSV文件并修改其条目。我目前正在使用StreamReader读取CSV的每一行并将其拆分为一个数组,我可以根据其位置修改每个条目。

CSV是从电子表单提供程序生成的,其中特定表单条目是多行字段,用户可以在其中添加多个备注。但是,当用户输入新笔记时,他们会通过换行符分隔每个笔记。

CSV示例:

"FName","LName","Email","Note 1: some text

Note 2: some text"

由于我的代码逐行拆分每个CSV条目,一旦达到这些条目,它就会认为它是一个新的CSV条目。这导致我的代码修改条目不起作用,因为元素位置变得不正确。 (带有空行或单行注释字段的CSV条目可正常工作)

关于采取最佳方法的任何想法?我已经尝试添加代码来替换回车或跳过空行,但它似乎没有帮助。

3 个答案:

答案 0 :(得分:0)

您可以检查行中的第一列值是否为空。如果为null则继续读取下一行。

答案 1 :(得分:0)

假设您提供的CSV示例应该只是CSV文件中的一个条目(由于换行符,最后一个字段跨越几个不同的行),您可以尝试这样的事情,使用2个循环。

  1. 为当前CSV记录(String[]类型)currentRecordrecordList(列表或数组)保留一个变量,以保留所有CSV记录。
  2. 读取CSV文件的一行
  3. 使用逗号作为分隔符将其拆分为字符串数组。将此数组保存在临时变量中。
  4. 如果此数组的大小为1,请将此字符串追加到currentRecord中的最后一个元素(第4个)(如果currentRecord不为空)。
  5. 继续从CSV文件中读取行,并重复步骤4,直到数组大小为4.
  6. 如果尺寸为4,则表示该记录是CSV文件中的下一条记录,您可以将currentRecord添加到recordList
  7. 继续重复步骤2到6,直至到达CSV文件的末尾
  8. 如果您可以在解析之前删除字段中的换行符并清理CSV文件会更好。它会让事情变得更简单。

答案 2 :(得分:0)

使用适当的CSV库来处理写入和解析。这里有一些边缘案例要处理,而不仅仅是新行。用户还可以在他们的笔记中插入逗号或引号,自己处理它会变得非常混乱。

尝试uniVocity-parsers,因为它可以在解析和编写CSV时处理各种情况。

披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。