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 个索引工作正常,有人为我修复此问题,我在哪里犯了错误
评论里有答案,但并不完全一致。
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 解析包可以处理这些情况,但您将更难添加代码来始终正确处理这些情况。