3

我有一个 CSV 文件,其中包含 3 个标头 A、B、C。在我的代码中,我使用 CSVReader 的 get 方法来访问这些标头中的值。如果我使用相同的代码来处理只有标题 A、B(而不是 C)的文件,有没有办法 CSVFormat 来避免 get() IllegalArgumentException?

谢谢。

4

1 回答 1

3

我认为您可以只使用“标题自动检测”并仅在通过 getHeaderMap() 将其检测为标题时读取“C”列:

    try (Reader in = new StringReader(
            "A,B,C\n" +
            "1,2,3\n")) {
        CSVParser records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in);
        for (CSVRecord record : records) {
            System.out.println("A: " + record.get("A"));
            System.out.println("B: " + record.get("B"));
            System.out.println("C: " + record.get("C"));
        }
    }

    try (Reader in = new StringReader(
            "A,B\n" +
            "4,5\n")) {
        CSVParser records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in);
        for (CSVRecord record : records) {
            System.out.println("A: " + record.get("A"));
            System.out.println("B: " + record.get("B"));
            if(records.getHeaderMap().containsKey("C")) {
                System.out.println("C: " + record.get("C"));
            } else {
                System.out.println("C not found");
            }
        }
    }
于 2018-09-22T09:32:48.093 回答