Java 如何使用OpenCSV区分空字符串和空字符串

Java 如何使用OpenCSV区分空字符串和空字符串,java,null,opencsv,Java,Null,Opencsv,这是我的代码: CSVReader reader = new CSVReader(isReader); while ((col = reader.readNext()) != null) { String c1 = col[1]; } 这是我的csv文件: "a","","c" "1",,"3" 有没有办法区分null和“”?OpenCSV似乎将所有内容都视为非空字符串。我可以告诉它将空字段视为null吗?这是不可能的。在CSV格式的原理中,空字符串和java特定的null之间没有区别

这是我的代码:

CSVReader reader = new CSVReader(isReader);
while ((col = reader.readNext()) != null) {
   String c1 = col[1];
}
这是我的csv文件:

"a","","c"
"1",,"3"

有没有办法区分null和“”?OpenCSV似乎将所有内容都视为非空字符串。我可以告诉它将空字段视为null吗?

这是不可能的。在
CSV
格式的原理中,空字符串和java特定的
null
之间没有区别。
null
java
对象内存模型中的空引用。CSV中没有任何引用,只有空值。

我找到了解决方案:strictQuotes可用于获取空值:

CSVReader reader = new CSVReader(isReader, ',', '"', true);
while ((col = reader.readNext()) != null) {
   String c1 = col[1];
   if (null != c1) {
       // ...
   }
}

从OpenCSV3.6(可能更早)开始,在@Gavriel的回答中,我发现strictQuotes不再有助于返回null

为此,CSVReaderBuilder具有withFieldAsNull()

CSVReader csvReader = new CSVReaderBuilder(csvFileReader)
    .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
    .build();
使用OpenCSV5.0

CSVParser csvParser = new CSVParserBuilder()
                        .withSeparator(",")
                        .withQuoteChar('"')
                        .withFieldAsNull(CSVReaderNullFieldIndicator.BOTH)
                        .build();

                csvReader = new CSVReaderBuilder(new InputStreamReader(...))
                        .withCSVParser(csvParser)
                        .build();

有。在上面的csv示例中,我希望opencsv注意到、、和“”之间的差异,。默认情况下,将所有内容转换为非空字符串将是正常的,但我希望有一个可选参数,在这里我可以重写默认行为,并让OpenCsv知道每当它看到某个字符串时,就应该将其视为NULL。但是为了让它工作,它必须在解析器内部(我不能扩展opencsv来添加这个IMHO),因为在我获取数据的级别中,它已经转换为“@Gavriel”,根据
CSV
格式,
,”,
是相同的东西。那个标准在哪里?我认为没有csv RFC yetI没有看到任何关于空字段的内容。我相信这一定是正确的答案,因为大多数读者构造函数都不推荐使用。顺便说一句,该指示器也有两个选项,将空分隔符和空引号都视为null。仅当在CSVParserBuilder上设置“withFieldAsNull”时,对我有效,而不是在CSVReaderBuilder上,首先创建CSVParserBuilder,并使用它创建CSVReaderBuilder,如下所示-CSVReaderBuilder(新CSVParserBuilder(…)-(打开csv 5.0)