将.txt文件的每一行分配给多维数组中的单元格

时间:2013-11-22 17:03:25

标签: java arrays parsing multidimensional-array

我有一个1302行的.txt文件,它平均分为14 x 93(对应14列和93行)。我想将1302行解析成[93][14]多维数组。我有以下脚本遍历每个单独的“单元格”,但至于文件解析,我有一些问题。

        int rows = 93;
        int columns = 14;
        int i;
        int j;
        int count = 0;

        String[][] array = new String[rows][columns];
        for(i = 0; i < rows; i++){
            for(j = 0; j < columns; j++){
                System.out.println(i + "," + j);
                count++;
            }
        }

如何将文本文件的每个“行”分配到每个单元格?

3 个答案:

答案 0 :(得分:1)

我的推荐(除了使用double[][]更改为List<List<Double>>之类的内容)将通过每个文本行:

InputStream    fis;
BufferedReader br;
String         line;

fis = new FileInputStream("the_file_name");
br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
while ((line = br.readLine()) != null) {
    // Deal with the line
}

// Done with the file
br.close();
br = null;
fis = null;

有了这个,你应该能够得到每个人&#39; line&#39;的文件。我之前使用List<List<Double>>代替double[][]提到的原因是因为你得到了两件事:

1)动态调整大小。即使您知道尺寸并希望将该列表设置为默认大小以帮助提高性能,您也不会限制这个大小,这值得它在...中的重量?程序员黄金。

2)使用原始double(小写d)而不是Java对象Double(大写D)真的会杀死你,因为没有访问很多很好的方法和内置于Double(capitol D对象)的可用性。有关此问题的更多解释,请参阅:Double vs. double

另请注意,上面的代码没有错误检查,因此您希望将其中的一部分构建到其中,这是一个非常基本的实现。

修改::

好的,所以在您发布于code snipped的代码中,您有一个readLine()循环的双循环INSIDE。像这样:

while ((line = br.readLine()) != null) {
    for (int i = 0; i < rows; i++){
        for(int j = 0; j< columns; j++){
            line = array[i][j];
         }
     }   
}

现在,有两个问题:

1)你将LINE设置为等于array [i] [j]的内容,这意味着什么,因为数组只是一个空的二维数组。

2)对于文本文件中的每一行,你循环1302次(然后再多一些,因为你正在做(1302 *列)* 1302

上面这段代码真正做的是,它会照顾你的行&#39;环。所以不要做你正在做的事情,而是做:

int i = 0;
while ((line = br.readLine()) != null) {
    array[i][0] = line;
    i++
}

将使用文件中的所有字符串填充数组。

答案 1 :(得分:0)

使用ScannerBufferedReader读取行(行),然后使用split("\\s+");将行拆分为标记(列)。然后在每个标记上使用Double.parseDouble(),然后将其插入到数组中。

答案 2 :(得分:0)

为了将任何内容分配给2D矩阵,您可以执行以下操作:

for (int r=0; r<NUM_ROWS; r++)
    for (int c=0; c<NUM_COLS; c++)
        matrix[r][c] = get_line(r*NUM_COLS + c)

get_line(i)将获取文件中的第i行

相关问题