当前位置:  开发笔记 > 编程语言 > 正文

Apache通用CSVParser / CSVRecord为空字段返回null

如何解决《Apache通用CSVParser/CSVRecord为空字段返回null》经验,为你挑选了1个好方法。

所有

我对Apache通用CSVParser / CSVRecord有疑问。看看下面的CSV文件:

Header1,Header2,Header3
"",,"L1C3"

CSVParser / CSVRecord的前两列返回“”。就我而言,我想区分空的string(“”)和null值。是否可以配置为让CSVParser为第二列返回null?

谢谢。



1> Carlos Jaime..:

我用过这种格式:

CSVFormat.RFC4180.withFirstRecordAsHeader()
   .withIgnoreSurroundingSpaces()
   .withNullString("")

其中2种配置:

    忽略空格 -修剪两侧的任何值,如果所有空间都被修剪为空白

    空字符串 -将空白视为空

这是一个示例用法:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import org.junit.Test;

public class CsvParseTest {

    @Test
    public void testParseWillTrimAndConvertToNull() throws Exception {
        String CSV_HEADER = "Name,MobileNo,Location";
        String CSV_ROW_1 = "abc,   ,australia"; // MobileNo is 3 whitespaces
        CSVParser parse = CSVFormat.RFC4180.withFirstRecordAsHeader().withIgnoreSurroundingSpaces().withNullString("")
                .parse(new BufferedReader(new StringReader(CSV_HEADER + "\n" + CSV_ROW_1)));

        CsvRecord rec = parse.getRecords().get(0);
        assertEquals("abc", rec.get("Name"));
        assertNull(rec.get("MobileNo"));
        assertEquals("australia", rec.get("Location"));
    }
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有