2016-09-08 31 views
0

私はcsvファイルを繰り返して、ヘッダーでデータを取り出しています。しかし、私は末尾のスペースを許して、ヘッダを認識したい。たとえばHeader1,Header2,Header3については末尾のスペースを無視してCSVレコードを読み取る

はまだ

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 ,Header2,Header3

私のコードとして認識すべきである。しかし、それは正確に(末尾のスペース)と一致しない場合は、もちろん、これはのみHeader1を見つけるでしょう。

私はあなたが変数にCSVFormat.EXCEL.withHeader().parse(in)を使用して構築CSVParserオブジェクトを格納した場合、その後、あなたが希望のヘッダーのインデックスを見つけるために、メソッドgetHeaderMap()を使用することができる

答えて

2

ようrecord.getIgnoreSpace()か何かのような任意の方法を見つけることができませんでした。ヘッダー名の代わりにこれらのインデックスを使用して、フィールドをルックアップすることができます(これは実際にルックアップを実行するための効率的な方法です)。それを行うには

一つの方法は、このようなものです:

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