我对Java比较陌生。我正在尝试读取.csv文件并对其进行一些计算。我成功地设法读取文件并以字符串的形式获取数据,结构为csv,使用" " (空格)而不是逗号,然后我想将数字(字符串)转换为双精度数并将它们存储在数组中。
dataArray在类中声明如下:
public double dataArray[][];
出于某种原因,在运行以下方法填充后,我得到一个空数组(一个只有0.0的数组):
//Store value into the array
public void toArray()
{
try
{
int nrows = this.text.split("\n").length;
int ncolumns =this.text.split("\n")[0].split(" ").length;
//System.out.println(nrows);
//System.out.println(ncolumns);
this.dataArray = new double[nrows][ncolumns];
for(int i=0; i<nrows ;i++)
{
for(int k=1; k<(ncolumns-1);k++)
{
double number = Double.parseDouble(this.text.split("\n")[i].split(" ")[k]); //Double.parseDouble(this.text.split("\n")[i].split(" ")[k]);
this.dataArray[i][k] = number;
}
}
}catch(Exception e)
{
System.out.println(e);
}
}
我做错了什么?我尝试了几种修复,即使在这种方法中使用其他方法,但还没有找到解决方案..
编辑:修正了k错了
答案 0 :(得分:2)
我没有调试您的代码,而是为您提供了一个可以满足您需求的工作片段:
public void toArray() {
String[] split = this.text.split("\n");
this.data = new double[split.length][];
for (int i=0 ; i<data.length ; i++) {
String[] cols = split[i].split("\\s+");
data[i] = new double[cols.length];
for (int j=0 ; j<cols.length ; j++)
data[i][j] = Double.parseDouble(cols[j]);
}
}
经过测试:text = "1 2 3 4\n5 6 7 8\n9 10 11"
输出:data = [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0]]