有没有办法配置 SuperCSV 期望如何处理 NULL 值?这有时被处理为:
,,
Run Code Online (Sandbox Code Playgroud)
或作为:
,NULL,
Run Code Online (Sandbox Code Playgroud)
或作为:
,null,
Run Code Online (Sandbox Code Playgroud)
但是我似乎找不到一种方法来配置 SuperCSV 期望如何处理这些,尤其是对于数字列。
,,由 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
会打印
true
false
false
Run Code Online (Sandbox Code Playgroud)
你可以把它处理"NULL",并"null"通过使用Cell处理器的组合(以及Optional和Token)。为了使其更具可重用性,您可以定义自己的处理器,只需对其进行设置。该处理器将检查null, then "null", then"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)));
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这个处理器
@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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个会打印
true
true
true
Run Code Online (Sandbox Code Playgroud)
要处理数字列,您可以简单地将其链接在一起,就像使用Optional:
new CustomOptional(new ParseInt())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3147 次 |
| 最近记录: |