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)