gpt4 book ai didi

java - 将两个 CSV 文件导入 Java,然后解析它们。第一个有效,第二个无效

转载 作者:行者123 更新时间:2023-12-02 10:22:52 26 4
gpt4 key购买 nike

我正在处理我的代码,我正在导入两个 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();
}

我得到的第一个错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at 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]);

这确实是一个只包含整数的列。我的第二栏也确实只是美国城市名称的一栏。该列唯一的问题是一些城镇名称(例如 Middlebrook)中存在空格,但我认为这不会给 String 类型带来问题。另外,在我的公司专栏中,有诸如 AT&T 之类的名称,但我认为 & 符号也不会导致字符串出现问题。我不知道我哪里错了。

我无法包含 csv 文件,但这是其中一部分的图片。每列的长度为 1000。 A pic of the csv file

最佳答案

扫描仪默认情况下按空格 ( docs ) 分割其输入。空白意味着空格、制表符和换行符。因此,我认为您的代码将在每个空格和每个换行符处拆分整个输入文件,这不是您想要的。

因此,您的代码将读取的前三个元素是

5416499,Prairie
Ridge,NIKE
1765368,Edison,Cartier

我建议使用方法readLine of BufferedReader然后调用 split 。

另一种方法是明确告诉扫描仪您希望它如何分割输入

Scanner inputStream1 = new Scanner(file1).useDelimiter("\n");

但我认为当更简单的类(BufferedReader)就可以时,这不是 Scanner 的最佳用途。

关于java - 将两个 CSV 文件导入 Java,然后解析它们。第一个有效,第二个无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54197654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com