2016-09-08 2 views
0

Я выполняю итерацию через файл csv и вытаскиваю данные заголовками. Но я хочу разрешить трейлинг-пробелы и по-прежнему распознавать заголовок.Чтение записей CSV при игнорировании конечных пробелов

Например Header1,Header2,Header3 еще должен признан Header1 ,Header2,Header3

Мой код ...

final Reader in = new BufferedReader(new InputStreamReader(csv)); 

for (CSVRecord record : CSVFormat.EXCEL.withHeader().parse(in)) { 
    try { 
     final MyObject mo = new MyObject(); 
     mo.setHeader1(record.get("Header1")); 
     mo.setHeader2(record.get("Header2")); 
     mo.setHeader3(record.get("Header3")); 
     .... 
    }catch(){ 
     .... 
    } 
} 

Но это, конечно, будет найти только Header1, если он не соответствует точно (без хвостовых пробелов).

Я не мог найти какой-либо метод, как record.getIgnoreSpace() или что-то вроде этого

ответ

2

Если вы храните CSVParser объект, построенный с использованием CSVFormat.EXCEL.withHeader().parse(in) в переменную, то вы можете использовать метод getHeaderMap() найти индексы нужных заголовков. Эти индексы затем могут использоваться вместо имен заголовков для поиска полей (что также является более эффективным способом выполнения поиска).

Один из способов сделать это так:

CSVParser parser = CSVFormat.EXCEL.withHeader().parse(in); 
Map<String, Integer> headerMap = parser.getHeaderMap(); 

int header1Index = -1; 
int header2Index = -1; 
for (Map.Entry<String, Integer> entry : headerMap.entrySet()) { 
    String name = entry.getKey(); 
    int index = entry.getValue(); 

    switch (name.trim()) { 
    case "Header1": 
     header1Index = index; 
     break; 
    case "Header2": 
     header2Index = index; 
     break; 
    } 
} 

for (CSVRecord record : parser) { 
    ... 
    mo.setHeader1(record.get(header1Index)); 
    ... 
} 
+0

Спасибо, я был в состоянии заставить его работать с этим! – John

Смежные вопросы