线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:索引 18 超出长度 18 的范围

问题描述 投票:0回答:1
class CSVFileParser {
    ArrayList<String[]> convertCSVToArrayList(String filePath) {
        String line = "";
        ArrayList<String[]> rows = new ArrayList<>();
        try {
            BufferedReader br = new BufferedReader(new FileReader(filePath));
            while ((line = br.readLine()) != null) {
                String[] row = line.split(",");
                rows.add(row);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return rows;
    }
}

请帮助我为什么它不起作用。当我尝试添加第 18 个索引时,出现此错误,直到第 17 个索引工作正常,有人为我修复此问题,我在哪里犯了错误

delivery.csv 文件 matches.csv 文件

java bufferedreader
1个回答
0
投票

评论里有答案,但并不完全一致。

String.split",")
将返回一个长度等于找到的字段数的数组,因此如果有17个逗号,它将是一个索引为[0]到[17]、长度为18的数组。文件delivery.csv有标题有 20 个字段,但并非所有行的长度都相同。这是第一个问题,所有行都应该有 19 个逗号,短行末尾应该有空字段,如“abc,def,qrs,tuv,,,”。

另一方面,你的软件也应该能够处理这样的错误。如果您使用为读取 CSV 文件而开发的包,那么这可能已经完成了。如果你想以这种方式使用

split()
,你必须在尝试访问它之前检查返回数组的长度。

此外,您可能需要以其他方式验证 CSV 文件,它可能会省略中间的字段(例如,它可能具有“abc,ghi”而不是“abc,,ghi”)。如果是这种情况,请尝试获取格式正确的文件,否则您可能需要对特殊情况进行编码来纠正这些问题。

此外,请确保文件中不存在数据中包含逗号的“

abc,"d,f",ghi
”或“
abc,d\,f,ghi
”等情况。 CSV 解析包可以处理这些情况,但您将更难添加代码来始终正确处理这些情况。

© www.soinside.com 2019 - 2024. All rights reserved.