解析に Apache Commons CSV を使用しますが、欠落している列を無視せず、例外をスローします。
このサンプルデータでは:
name age
Ali 35
John 25
Vahid 75
以下のコードrecord.get(DataColumns.surname)
は をスローしjava.lang.IllegalArgumentException: Mapping for surname not found, expected one of [name, surname, age]
ます。null、オプション、またはデフォルト値を返す必要があります。オプションはありますか?私はそれが可能であることを知っていますrecord.toMap().get(DataColumns.surname.name())
が、そのパフォーマンスは良くありません:
...
enum DataColumns { name, surname, age }
...
Reader in = new BufferedReader(new FileReader(fileName));
try (CSVParser records = CSVFormat.TDF
.withDelimiter(' ')
.withIgnoreSurroundingSpaces()
.withAllowDuplicateHeaderNames(false)
.withIgnoreHeaderCase()
.withTrim()
.withHeader(DataColumns.class)
.withFirstRecordAsHeader()
.withSkipHeaderRecord()
.withAllowMissingColumnNames(false)
.withIgnoreEmptyLines()
.parse(in)) {
for (CSVRecord record : records) {
String name = record.get(DataColumns.name);
String surname = record.get(DataColumns.surname);
Short age = Short.valueOf(record.get(DataColumns.age));
}
}
...