我正在遍历一个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()之类的方法

最佳答案

如果将使用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));
    ...
}

关于java - 读取CSV记录而忽略尾随空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39394373/

10-09 09:36