【问题标题】:Unexpected quoting in Apache Commons CSVApache Commons CSV 中的意外引用
【发布时间】:2016-04-16 11:02:16
【问题描述】:

在使用具有以下 maven 依赖项的 Apache CSV 时。我得到了意想不到的结果。

  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.2</version>
</dependency>

简单的代码无法按预期为我工作。 谁能告诉我这里出了什么问题?

System.out.println(CSVFormat.DEFAULT.format("-10","10"));

实际输出:"-10",10

预期输出:-10,10

System.out.println(CSVFormat.DEFAULT.format("10","-10"));

实际输出:10,-10

预期输出:10,-10

System.out.println(CSVFormat.DEFAULT.format(".10","-10"));

实际输出:".10",-10

预期输出:.10,-10

System.out.println(CSVFormat.DEFAULT.format("+10","-10"));

实际输出:"+10",-10

预期输出:+10,-10

【问题讨论】:

  • 所以默认格式不是你所期望的,而且?
  • 是的,我认为它在 Apache CSV 中存在错误。
  • 我建议您找到一些支持您的错误想法的官方文档并使用该信息编辑您的问题
  • 谢谢,我在 Apache CSV Jira issues.apache.org/jira/browse/CSV-148 中发现了类似的错误

标签: java apache-commons-csv


【解决方案1】:

您上面列出的实际结果是合法的 CSV 格式(即使使用引号也可以解析),但我可以看到它看起来像是意外输出。

这是CSVPrinter.java中的source code

// TODO where did this rule come from?
if (newRecord && (c < '0' || (c > '9' && c < 'A') || (c > 'Z' && c < 'a') || (c > 'z'))) {
    quote = true;
}

如果行中的第一项不以字母数字字符开头,此代码将引用它。

如果你浏览类上的code history,你会发现这种行为从存储库开始(2011 年 11 月 9 日)就一直存在。

我没有注意到issue tracker 上的任何相关错误,因此如果您认为应该更改默认行为,您应该打开一个问题。或者,您可以考虑使用 QuoteMode 使用 CSVFormat.withQuoteMode()

【讨论】:

猜你喜欢
  • 2017-06-26
  • 2016-11-20
  • 2016-07-23
  • 2011-03-16
  • 2018-07-07
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多