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

时间:2014-08-14 06:42:38

标签: 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 String。我可以告诉它将空字段视为空吗?

4 个答案:

答案 0 :(得分:2)

这是不可能的。在null格式的哲学中,空字符串与特定于Java的CSV之间没有区别。 nulljava对象内存模型中的空引用。在CSV中,没有任何引用,只有空值。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

从OpenCSV 3.6(可能更早)开始,添加到@ Gavriel的答案,我发现strictQuotes不再有助于返回null。

CSVReaderBuilder为此目的使用withFieldAsNull()。

CSVReader csvReader = new CSVReaderBuilder(csvFileReader)
    .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
    .build();

答案 3 :(得分:1)

使用打开的csv 5.0

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

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