将表中的浮点解析为2D数组

时间:2014-03-23 23:19:22

标签: java parsing multidimensional-array

我有一个包含浮点方形表的文件。该文件是一个示例,因此行和列的数量可能会在其他文件中更改以供读取。

我遇到了一个越​​界异常,无法弄清问题是什么。

 while ((line=bufferedReader.readLine())!=null){
       String[] allIds = line.split(tabSplit);
       String[] allFloats = new String[allIds.length-2];
//i do "length-2" because the first two columns in the table are not numbers and are
 supposed to be ignored.

       System.arraycopy(allIds, 2, allFloats, 0, allIds.length-2);
       int rows = rowsNumber;
       int cols = colsNumber;
//i have "rows" and "cols" values already extracted from the file and they return the
correct integers.

       double [][]twoD = new double[rows][cols];
       int rowCount = 0;
           for (int i = 0; i<rows; i++) {                    
            twoD[rowCount][i] = Double.parseDouble(allFloats[i]);
       }
   rowCount++;
}

             }

我的表看起来像这样,但有更多的行和列:

#18204     name01     2.67   2.79   2.87   2.7
#12480     name02     4.01   3.64   4.06   4.24
#21408     name03     3.4    3.55   3.34   3.58
#a2u47     name04     7.4    7.52   7.62   7.23
#38590     name05     7.63   7.29   8      7.72

当我打印allFloats时,它会正确返回单独数组中的每一行。我不明白为什么在尝试创建2D数组时出现错误。

2 个答案:

答案 0 :(得分:2)

编辑: 请尝试以下方法:

int rowCount = 0;
int rows = rowsNumber;
int cols = colsNumber;
double[][] twoD = new double[rows][cols];

while ( ( line=bufferedReader.readLine() ) != null )
{
    String[] allIds = line.split( tabSplit );
    String[] allFloats = new String[allIds.length-2];

    System.arraycopy(allIds, 2, allFloats, 0, allIds.length-2);

    for (int i = 0; i<cols; i++)
    {                    
       twoD[rowCount][i] = Double.parseDouble(allFloats[i]);
    }

    rowCount++
}

答案 1 :(得分:0)

您正在每行创建二维双数组。我建议首先生成一个二维数组,其中包含每个行的所有浮点值,然后迭代该数组,然后从中解析一个double。