【问题标题】:Inserting blank line in csv using java使用java在csv中插入空行
【发布时间】:2018-08-30 15:19:48
【问题描述】:

我想使用 java 在 csv 中插入一个空行。我写了以下代码:

CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator("\n").withEscape('\\');
FileWriter fileWriter = new FileWriter(csvFile);

CSVPrinter csvFilePrinter = new CSVPrinter(fileWriter,csvFileFormat);

csvFilePrinter.printRecord("data1");
csvFilePrinter.printRecord("\n");
csvFilePrinter.printRecord("data2");

当我在 notepad++ 中打开这个生成的 CSV 文件时,我得到 2 个空行:

 data1
 " 
 "
 data2

我怎样才能得到一个空行?

【问题讨论】:

  • 数据之间的单个空行不是有效的 CSV。你会如何解析它?
  • 不要将输出视为“两个空行”,您会得到一个“记录”,它是用引号括起来的换行符

标签: java csv apache-commons-csv


【解决方案1】:

printRecord 在数据后打印一个记录分隔符,在本例中为换行符。

然后您打印一个换行符,该换行符被打印为包含另一个换行符的字符串,它在不同的行上为您提供这两个双引号。

只需删除打印换行符的行,或者,如果您真的想要该空行,请使用csvFilePrinter.println(),它将输出记录分隔符(在您的情况下为"\n")。

【讨论】:

  • 删除它不会按照要求在输出中创建一个空行
  • CSVFormat 可以选择忽略空白行
【解决方案2】:

尝试 csvFilePrinter.printRecord(""); csvFilePrinter.println(); printRecord 将自动转义该行。您不需要额外的转义字符。

【讨论】:

  • 这仍然会将两个引号放在一行上,不是吗?
  • 是的.. "" 仍然出现在空白行
【解决方案3】:

我想用csvFilePrinter.println(); 替换csvFilePrinter.printRecord("\n"); 就可以了。 println() 将输出行分隔符,因此您将得到完全空行,不带引号。

希望对你有帮助!

【讨论】:

  • 这仍然会将两个引号放在一行上,不是吗?
  • 这有效.. 但正如@cricket_007 所说,我得到以下输出:data1 "" data 2
  • @RadhikaKulkarni,在你澄清后我已经更新了我的答案。
【解决方案4】:

您使用 CSVFilePrinter 定义

CSVFormat.DEFAULT.withRecordSeparator("\n")

因此对于每条记录,将附加一个额外的\n。然后打印三个记录:“data1”、“\n”、“data2”

这将产生“data1\n\n\ndata2\n”,这正是你得到的结果。

只需将第二条记录替换为“”即可。

【讨论】:

  • 我同意你的逻辑。我有 1 个问题。为什么在那些空白行显示“?
  • @RadhikaKulkarni 你说得对,我无法解释。我以为你只是想强调空行。是一个双引号(“)还是两个单引号('')?在后一种情况下,这可能是表示一个空值
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2018-05-28
  • 2021-08-14
  • 2016-06-26
  • 2015-12-07
  • 2016-04-09
  • 2018-03-17
相关资源
最近更新 更多