全部

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

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

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

谢谢你。

最佳答案

我用过这种格式:

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"));
        }
    }
    

    关于java - Apache通用CSVParser/CSVRecord为空字段返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34734125/

    10-11 17:06