JAVA CSV 写作 Space 不带引号

JAVA CSV writing Space without quotes

我正在使用 Apache Commons CSV 库来编写 CSV 文件。

提供给我的样本有一个奇怪的模式。

预期样本输出:

可以看出,Name with designation 列可以有带逗号的值。所以他们需要被引用。 但是,有些值的 space 为空,例如 phone no,它只能为空 space,或者 Action 列,其中值可以包含空 space(中间或结尾)。

现在,当我使用 apache 公共库编写 CSV 时,我使用了以下 CSVFormatCSVPrinter class。

CSVFormat.EXCEL.withQuoteMode(QuoteMode.MINIMAL));

此配置给出了最接近示例的输出。但是,空 space 或尾随 space 的值,也就是说,即使没有逗号,也会被引用。

我的输出:

我需要的是,当最后只有space或space,并且value没有逗号时,引号就不会出现

Apache Commons 中是否有我遗漏的任何配置?或者是否有任何其他 CSV 库具有提供此输出的格式?

univocity-parsers 为所欲为。试试这个代码:

    CsvWriterSettings settings = Csv.writeExcel();
    settings.trimValues(false); //values are trimmed by default
    settings.setHeaders("Name with designation","Phone","Action","Date");
    settings.setHeaderWritingEnabled(true);

    StringWriter output = new StringWriter();
    CsvWriter writer = new CsvWriter(output, settings);

    writer.writeRow("John Doe,Officer"," ","Under investigation","8-Jun-2017");
    writer.writeRow("Jack","+123-4567","False Allegation ","4-Jun-2017");

    writer.close();

    System.out.println(output);

输出将是:

Name with designation,Phone,Action,Date
"John Doe,Officer", ,Under investigation,8-Jun-2017
Jack,+123-4567,False Allegation ,4-Jun-2017

希望对您有所帮助。

免责声明:我是这个图书馆的作者。它是开源且免费的(Apache 2.0 许可证)

您可以使用super-csv. That follows the RFC-4180

 CsvListWriter c = new CsvListWriter(new PrintWriter(System.out), CsvPreference.STANDARD_PREFERENCE);
 c.write(Lists.newArrayList(" Aa", " ", " John \"Doe\"", "Comma,", "test "));

 c.flush();
 c.close();

写:

 Aa, ," John ""Doe""","Comma,",test 

Maven 依赖项:

<!-- https://mvnrepository.com/artifact/net.sf.supercsv/super-csv -->
<dependency>
    <groupId>net.sf.supercsv</groupId>
    <artifactId>super-csv</artifactId>
    <version>2.4.0</version>
</dependency>