如何使用CSVReader?

时间:2014-01-07 05:19:46

标签: java csv inputstream fileinputstream

我正在尝试使用CSVReader在记事本中读取我的文件,但我无法正常工作。它说ArrayIndexOutOfBoundsException: 2 line "y[i][2]".虽然我在100中对我的数组行进行了操作。我目前是使用Java和CSVReader的新手。

public static void main(String[] args) throws IOException {

    double[][] x = new double[100][3];
    double[][] y = new double[100][1];

    String line[];
    try{
        CSVReader br=new CSVReader(new FileReader("ex2data2.txt"),',');
        int i = 0;
        while((line=br.readNext())!=null){
            x[i][0] = Double.parseDouble(line[0]);
            x[i][1] = Double.parseDouble(line[1]);
            y[i][2] = Double.parseDouble(line[2]);
            i++;
        }
        br.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

您已创建

double[][] y = new double[100][1];

即。 100行1列。但试图将价值放在y[i][2]位置。这就是为什么你得到ArrayIndexOutOfBoundsException。创建像

double[][] y = new double[100][3];

或者您可以简单地将值设为(在这种情况下,您不需要像上面那样创建2D数组)

y[i][0] = Double.parseDouble(line[2]);

答案 1 :(得分:0)

完全不清楚为什么你会在从文件中读取数据之后存储数据,但是......

double[][] y = new double[100][1];

这会分配一个包含100个double数组的数组,每个数组的长度为 1

下面:

 y[i][2] = Double.parseDouble(line[2]);

您尝试将某些内容存储在这100个阵列之一的第三元素中。它们不是那么大;你创建它们的长度为一个

我怀疑你打算这样做:

 y[i][0] = Double.parseDouble(line[2]);

因为您在y数组中存储的唯一内容就是单个值。

所有这一切,这是存储这些价值的不好方法。通常,使用动态数据结构可以更好地服务,因此您不必担心文件的长度(行数)。另外,为什么需要两个不同的2D阵列?例如,即使是List<Double[]>也会更好。