【发布时间】:2019-01-15 11:07:49
【问题描述】:
我正在处理我的代码,我正在导入两个 csv 文件然后解析它们
//Importing CSV File for betreuen
String filename = "betreuen_4.csv";
File file = new File(filename);
//Importing CSV File for lieferant
String filename1 = "lieferant.csv";
File file1 = new File(filename1);
然后我继续解析它们。对于第一个 csv 文件,一切正常。代码是
try {
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext()) {
String data = inputStream.next();
String[] values = data.split(",");
int PInummer = Integer.parseInt(values[1]);
String MNummer = values[0];
String KundenID = values[2];
//System.out.println(MNummer);
//create the caring object with the required paramaters
//Caring caring = new Caring(MNummer,PInummer,KundenID);
//betreuen.add(caring);
}
inputStream.close();
}catch(FileNotFoundException d) {
d.printStackTrace();
}
然后我继续解析代码所在的另一个 csv 文件
// parsing csv file lieferant
try {
Scanner inputStream1 = new Scanner(file1);
while(inputStream1.hasNext()) {
String data1 = inputStream1.next();
String[] values1 = data1.split(",");
int LIDnummer = Integer.parseInt(values1[0]);
String citynames = values1[1];
System.out.println(LIDnummer);
String firmanames = values1[2];
//create the suppliers object with the required paramaters
//Suppliers suppliers = new
//Suppliers(LIDnummer,citynames,firmanames);
//lieferant.add(suppliers);
}
inputStream1.close();
}catch(FileNotFoundException d) {
d.printStackTrace();
}
我得到的第一个错误是
线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 2 在 Verbindung.main(Verbindung.java:61)
所以我在第 61 行查看了我的数组 firmaname,我认为,它不可能超出范围,因为在我的 CSV 文件中有三列并且在索引 2(我知道是 CSV 文件中的第三列)是我的公司名称列表。我知道数组不是空的,因为当我写
`System.out.println(firmanames)`
它将打印出前三个公司名称。因此,为了查看是否有其他原因导致问题,我将第 61 行注释掉,然后再次运行代码。我收到以下错误
`Exception in thread "main" java.lang.NumberFormatException: For input
string: "Ridge"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Verbindung.main(Verbindung.java:58)`
我在谷歌上搜索了这些错误,你知道它是在说我试图将某些东西解析成一个不能是整数的整数,但我唯一想要解析成整数的是代码
int LIDnummer = Integer.parseInt(values1[0]);
这确实是一个只包含整数的列。 我的第二列也确实只是美国城市名称的列。该列唯一的问题是某些城镇名称(如 Middle brook)中有空格,但我认为这不会导致 String 类型出现问题。在我的公司专栏中也有像 AT&T 这样的名称,但我认为 & 符号也不会导致字符串出现问题。我不知道我要去哪里错了。
我无法包含 csv 文件,但这是其中一部分的图片。每列的长度为 1000。 A pic of the csv file
【问题讨论】:
-
如果有问题的 CVS 文件很短,您可以发布它,以便我们提供帮助。但最好的办法是使用调试。另一件事是编写我们自己的 CSV 解析器是个坏主意,因为如果 ',' 是值本身的一部分,而不是分隔符的一部分,您的代码不处理大小写。
-
首先你得到的例外:它告诉你更多,它说你试图将“Ridge”解析成一个整数,这是不可能的。查看您的数据并搜索“Ridge”。他可能不小心出现在一个只有数字的列中。
-
@Sergey Prokofiev 我不知道如何包含 CSV 文件,但我包含了一张图片。我正在自己学习 Java,所以感谢您的建议,但在这一点上,我不明白为什么这不起作用,尽管它适用于其他 csv。
-
@moneydhaze 我看到 Ridge 来自我的 csv 的第二列,第一个条目的全名实际上是 Prairie Ridge。解析时csv文件中的空格会导致问题吗?
-
@user296098 图片是电子表格;这不会帮助我们调试您的解析代码。请将 csv 文件实际文本的第一行(例如 10 行)粘贴到您的问题中。