Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenCSV引用空值_Java_Csv_Opencsv - Fatal编程技术网

Java OpenCSV引用空值

Java OpenCSV引用空值,java,csv,opencsv,Java,Csv,Opencsv,使用OpenCSV库,调用statefleBeantoCSV.write()my null值被括在引号中 例如: String[] columns = new String[] { "Col1", "Col2", "Col3" }; ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy(); strat.setColumnMapping(columns); Writer writ

使用OpenCSV库,调用
statefleBeantoCSV.write()
my null值被括在引号中

例如:

String[] columns = new String[] {
    "Col1",
    "Col2",
    "Col3"
};

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setColumnMapping(columns);

Writer writer = new FileWriter(outputFilePath);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
        .withMappingStrategy(strat)
        .build();
beanToCsv.write(items);
writer.close();
将产生:

1,”,3

当我期待:

“1”、“3”

我没有通过
.withApplyQuotesToAll(true)
为所有字段设置引号

如果我确实使用了
。with applyquotestoall(true)
,我最终会使用

“1”、“1”、“3”

在某一点上,该库与此相反:


如何将空值写为空白/空值,而不是空字符串?

看起来您提到的不调用的方法实际上采用了布尔值。你试过以下方法吗

.withApplyQuotesToAll(false)

有一种方法可以做到这一点。设置
。withApplyQuotesToAll(false)
告诉OpenCSV只引用具有特殊字符的元素,但我们可以通过这样扩展CSVWrite类来更改OpenCSV的理解:

public class CustomCsvWriter extends CSVWriter {

    public CustomCsvWriter(Writer writer) {
        super(writer);
    }

    @Override
    protected boolean stringContainsSpecialCharacters(String line) {
        return !line.isEmpty();
     }
}
new StatefulBeanToCsvBuilder<>(new CustomCsvWriter(writer))
   .withMappingStrategy(strat)
   .withApplyQuotesToAll(false)
   .build();
因此,您可以创建一个StatefulBeanToCsv,如下所示:

public class CustomCsvWriter extends CSVWriter {

    public CustomCsvWriter(Writer writer) {
        super(writer);
    }

    @Override
    protected boolean stringContainsSpecialCharacters(String line) {
        return !line.isEmpty();
     }
}
new StatefulBeanToCsvBuilder<>(new CustomCsvWriter(writer))
   .withMappingStrategy(strat)
   .withApplyQuotesToAll(false)
   .build();
newstatefleBeantocsvBuilder(新的CustomCsvWriter(编写器))
.使用映射策略(strat)
.带ApplyQuotesToAll(假)
.build();

使用OpenCSV 5.3测试

否,我希望引用所有其他值(非空值),并且不引用空值。使用
.withApplyQuotesToAll(false)
调用生成器将导致写入的所有值都不带引号,这是不可接受的。原始问题中预期输出的示例中没有任何引号。你能把这个例子再充实一点来展示你的期望吗?所以理想情况下你希望看到“1”,“3”。除了空值之外,你想在所有东西周围加引号吗?是的,Scott,我想要“1”,“3”。我已经更新了这个问题以澄清这一点。我以前没有使用过这个库,但似乎解决您问题的一个简单方法是从收集的解析中提取每个空字符串,然后在使用生成的值之前去掉它周围的引号。如果使用字符串数组,另一种选择是在解析的数据中查找空字符串,然后将数组中的值设置为null,而不是空字符串。我感谢您的输入,但这不是解决当前问题的适当方法。更改需要在OpenCSV库的内部进行,但我希望这不是必需的,因为这是一个非常常见的用例。