zu überspringen, wenn eine CSV-Datei drei Spalten enthält und wenn die Werte wie unten angegeben sindUm leere Datensätze aus einer CSV-Datei mit Apache Commons CSV
a,b,c
//empty line
,,,
a,b,c
Es gibt zwei gültige Datensätze. Mit dem CSV-Parser von Apache Commons konnte ich den Datensatz, der leere Zeilen enthält, einfach überspringen. Aber wenn die Datensätze nur Nullwerte enthalten, wie kann man sie dann überspringen?
Um dies zu überwinden, verwende ich String
equals()
mit bereits konstruierten leeren Datensatz. Hier ist eine Beispielimplementierung.
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
}
}
Wenn ich die Linie nicht verwenden als ‚linea‘ markiert, gibt diese Implementierung drei Datensätze in den csvContentsList
wie unten
[a,b,c]
[null,null,null]
[a,b,c]
Gibt es eine eingebaute Möglichkeit, dies zu tun? oder ein anderer besserer Weg?
'CSVFormat.Default' enthält bereits' withIgnoreEmptyLines (true) '. https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html#DEFAULT. Und in der Frage habe ich bereits erwähnt, dass ich Leerzeilen überspringen kann. – Ram
@Ram Ich habe ein Java 8-Beispiel mit der Stream-API hinzugefügt. – SubOptimal