Apache Commons CSV 中的意外引用

Unexpected quoting in Apache Commons CSV

在使用具有以下 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

你上面列出的实际结果是合法的 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;
}

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

如果您浏览 class 上的 code history,您会发现此行为自存储库开始以来(2011 年 11 月 9 日)就一直存在。

我没有注意到 issue tracker, so you should open up a issue if you think the default behavior should be changed. Alternately, you could consider using a applying a QuoteMode 使用 CSVFormat.withQuoteMode() 的任何相关错误。