我正在处理我的代码,其中我导入了两个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();
}
我得到的第一个错误是
线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:2 在Verbindung.main(Verbindung.java:61)
因此,我在第61行查看我的数组,即
`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)`
我用谷歌搜索这些错误,您知道这是在说我试图将某些内容解析为一个不能为整数的Integer,但是我唯一要解析为Integer的是代码
int LIDnummer = Integer.parseInt(values1[0]);
实际上是仅包含整数的列。 我的第二列确实也只是美国的城市名称列。该列唯一的作用是在某些镇名(例如Middle brook)中有空格,但我认为这不会对String类型造成问题。在我公司的列中也有类似AT&T的名称,但我认为&符号也不会引起字符串问题。我不知道我要去哪里错了。
我无法包含csv文件,但这是其中一部分的图片。每列的长度为1000。 A pic of the csv file
答案 0 :(得分:1)
扫描仪默认情况下按空格(docs)分割其输入。空格表示空格,制表符和换行符。 因此,我认为您的代码将在每个空格和每个换行符处分割整个输入文件,这不是您想要的。
因此,您的代码将读取的前三个元素是
5416499,Prairie
Ridge,NIKE
1765368,Edison,Cartier
我建议使用方法readLine of BufferedReader,然后在其上调用split。
另一种方法是明确告诉Scanner您希望它如何分割输入
Scanner inputStream1 = new Scanner(file1).useDelimiter("\n");
但是我认为当一个简单的类(BufferedReader)可以使用Scanner时,这不是最好的选择。
答案 1 :(得分:0)
首先,我强烈建议您尝试使用现有的CSV解析器,例如this one。
但是如果您真的想使用自己的,则需要进行一些简单的调试。我不知道您的文件有多大,但是您所描述的症状使我相信csv中的某处可能缺少逗号或意外的转义字符。您需要找出它是哪一行。因此,运行此代码并在崩溃之前检查其输出:
int line = 1;
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];
line++;
}
} catch (ArrayIndexOutOfBoundsException e){
System.err.println("The issue in the csv is at line:" + line);
}
找到行后,答案应该显而易见。如果没有,请发布该行的图片,我们将看到...