【问题标题】:Java: Reading csv file into array errorJava:将csv文件读入数组错误
【发布时间】:2016-12-18 11:44:47
【问题描述】:

所以我有一个从 csv 文件中获取数据的项目。我已经将每一列传递到一个字符串数组中。当我尝试获取该数组的内容并将数据放入它们自己的数组中时,它会传递一个错误,因为正在读取列标题并且我无法编辑文件(项目的请求)。

犯罪.java

package crimestat;

import java.io.*;
import java.util.*;

public class Crime {

    private String Label[];
    private int Year[];
    private int Population[];
    private int Violent[];
    private double Violent_Rate[];
    private int Murder[];
    private double Murder_Rate[];
    private int Rape[];
    private double Rape_Rate[];
    private int Robery[];
    private double Robery_Rate[];
    private int Assault[];
    private double Assault_Rate[];
    private int Property[];
    private double Property_Rate[];
    private int Burglary[];
    private double Burglary_Rate[];
    private int Larceny[];
    private double Larceny_Rate[];
    private int Vehicle[];
    private double Vehicle_Rate[];

    public Crime() {
        Label = null;
        Year = null;
        Population = null;
        Violent = null;
        Violent_Rate = null;
        Murder = null;
        Murder_Rate = null;
        Rape = null;
        Rape_Rate = null;
        Robery = null;
        Robery_Rate = null;
        Assault = null;
        Assault_Rate = null;
        Property = null;
        Property_Rate = null;
        Burglary = null;
        Burglary_Rate = null;
        Larceny = null;
        Larceny_Rate = null;
        Vehicle = null;
        Vehicle_Rate = null;
    }

    public String get_Label(int i){
        return Label[i];
    }

    public int get_Year(int i){
        return Year[i];
    }

    public void set_Label(String[] Label){
        this.Label = Label;
    }

    public void set_Year(int i, Crime crime){
        this.Year[i] = Integer.parseInt(crime.get_Label(0));
    }

}

testCrime.java

package crimestat;

import java.io.*;
import java.util.*;

public class testCrime {

    static Crime obj = new Crime();

    public static void main(String[] args) throws IOException {
        Scanner file = null;
        int n=0;
        try {
            file = new Scanner(new BufferedReader(new FileReader("Crime.csv")));
            while (file.hasNextLine()) {
                obj.set_Label(file.nextLine().split(","));
                obj.set_Year(n,obj); 
                System.out.println(obj.get_Year(n));
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

错误

Exception in thread "main" java.lang.NumberFormatException: For input string: "Year"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at crimestat.Crime.set_Year(Crime.java:69)
at crimestat.testCrime.main(testCrime.java:20)

enter image description here

【问题讨论】:

    标签: java csv


    【解决方案1】:

    没有必要编辑文件。 因为第一列title。您可以从第二列开始存储数据。

    代码如下:

        file = new Scanner(new BufferedReader(new FileReader("Crime.csv"))); 
    
        while(file.hasNextLine()){
            String curLine = file.nextLine();
            obj.set_Label(curLine.substring(curLine.indexOf(",")+1).split(","));//filter the first column
            obj.set_Year(n,obj); 
    
            System.out.println(obj.get_Year(n));
    
        }
    }
    catch(IOException ex){
        ex.printStackTrace();
    }
    
     //update set_Label method
     public void set_Label(String[] Label){
         this.Label = new int[Label.length];
         for(int i = 0; i < Label.length;i++){
             this.Label[i] = Integer.valueOf(Label[i]);
         }
     }
    

    【讨论】:

    • 对不起,您一定误会了,
    • 对不起,你一定误解了,如果我这样做 'obj.set_Label(file.nextLine().split(",")); System.out.println(obj.get_Label(0));'我得到 Year, 1994, 1995 ... 等的输出
    • 但是在尝试将 String Label[0] 放入 int Year[n] 时会发生错误,因为 year 是抛出错误的字符串。
    • @paul minniti 哦,是的,但是将每个像“1997”这样的字符串转换成像 1997 这样的整数是相似的,只需使用 Integer.valueOf(String value) API
    • @paul minniti 我添加了set_Label method
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2013-12-11
    相关资源
    最近更新 更多