所有
我对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")); } }