一個CSV文件跳過空記錄,如果CSV文件包含三列,如果值低於要使用Apache共享CSV
a,b,c
//empty line
,,,
a,b,c
給出有兩種有效的記錄。使用Apache commons CSV解析器,我可以輕鬆地跳過空行的記錄。但是當記錄只包含空值時,如何跳過它呢?
爲了克服這個問題,我使用String
equals()
與已經構建的空記錄。這是一個示例實現。
List<String[]> csvContentsList = new ArrayList<String[]>();
CSVFormat csvFormat = CSVFormat.DEFAULT.withNullString("");
CSVParser csvParser = new CSVParser(fileReader, csvFormat);
String[] nullRecordArray = { null, null, null};
String nullRecordString = Arrays.toString(nullRecordArray);
for (CSVRecord csvRecord : csvParser) {
try {
String values[] = { csvRecord.get(0),csvRecord.get(1),csvRecord.get(2) };
if (!nullRecordString.equals(Arrays.toString(values))) //lineA
csvContentsList.add(values);
} catch (Exception e) {
// exception handling
}
}
當我不使用標記爲「LINEA」行了,這個實現給出了三個記錄在csvContentsList
如下
[a,b,c]
[null,null,null]
[a,b,c]
有什麼內在的方式做到這一點?或者其他更好的方法?
'CSVFormat.Default'已經包含'withIgnoreEmptyLines(true)'。 https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html#DEFAULT。在問題中,我已經提到我可以跳過空行。 – Ram
@Ram我使用Stream API添加了一個Java 8示例。 – SubOptimal