有没有办法配置SuperCSV期望处理NULL值的方式?这有时被处理为:
,,
或作为:
,NULL,
或作为:
,null,
但我似乎无法找到配置SuperCSV如何处理这些内容的方法,尤其是对于数字列。
答案 0 :(得分:4)
,,
由Super CSV自动处理。例如以下内容:
@Test
public void testNullsWithDefaultBehaviour() throws IOException{
String csv = ",null,NULL\n";
try (ICsvListReader reader = new CsvListReader(new StringReader(csv),
CsvPreference.STANDARD_PREFERENCE)){
List<String> values = reader.read();
for (String v : values){
System.out.println(v == null);
}
}
}
将打印
true
false
false
您可以使用单元格处理器("NULL"
和"null"
的组合)来处理Optional
和Token
。为了使其更具可重用性,您可以定义自己的处理器,只需设置它即可。此处理器将检查null
,然后检查"null"
,然后检查"NULL"
,如果找到匹配则返回null
,否则将返回未更改的值。
public class CustomOptional extends Optional {
public CustomOptional(){
super(new Token("null", null, new Token("NULL", null)));
}
public CustomOptional(final CellProcessor next) {
super(new Token("null", null, new Token("NULL", null, next)));
}
}
然后您可以使用此处理器
@Test
public void testNullsUsingProcessors() throws IOException{
String csv = ",null,NULL\n";
CellProcessor[] processors = {new CustomOptional(),
new CustomOptional(),
new CustomOptional()};
try (ICsvListReader reader = new CsvListReader(new StringReader(csv),
CsvPreference.STANDARD_PREFERENCE)){
List<Object> values = reader.read(processors);
for (Object v : values){
System.out.println(v == null);
}
}
}
将打印
true
true
true
要处理数字列,您可以像使用Optional
:
new CustomOptional(new ParseInt())