文件到2D数组

时间:2016-09-11 07:13:47

标签: java arrays

我需要从文本文件创建一个2D数组,以便以后在某些操作中使用。

这是我的文件以空格分隔“

0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0

这是我的代码:

import java.io.*;

public class TxtToArray{
    public static void main(String args[]){
        double[][] array = new double[100][100];
        int x=0, y=0;

        try{
            BufferedReader in = new BufferedReader(new FileReader("E:\\Documents\\JavaPrograms\\TxtToArray\\src\\Array.txt"));
            String bar;

            while ((bar = in.readLine()) != null){
                String[] values = bar.split(" ");
                for (String str : values){
                    double str_double = Double.parseDouble(str);
                    array[x][y]=str_double;
                    y++;
                }
                x++;
            }

            in.close();

        }catch( IOException ioException ) {
            System.out.println("Something happened...");
        }
    }
}

谢谢!寻求帮助

修改 我已经纠正了解释和代码语法中的一些错误。如果有更多让我知道。

2 个答案:

答案 0 :(得分:1)

你从来没有告诉我们问题是什么,但我看到的一个问题就是你只是在逗号上拆分每一行输入。这不会起作用,因为您的输入数据也使用空间作为分隔符。一个选项是在用逗号分割前删除此空格:

while ((bar = in.readLine()) != null) {
    String[] values = bar.replaceAll("\\s+", "")
                         .split(",");

    for (int y=0; y < values.length; ++y) {
        double str_double = Double.parseDouble(values[y]);
        array[x][y] = str_double;
    }

    x++;
}

您会注意到我使用for循环来迭代每个输入中的字符串。这是一个不错的选择,因为它不需要您管理数组的第二个索引。

答案 1 :(得分:0)

文件中的数字不仅由,分隔,还由空格分隔。如果参数中包含此空格,则Double.parseDouble会抛出异常。因此,您需要使用也匹配这些字符的正则表达式,例如,\s*。您还需要在y循环的每次迭代开始时将while设置回0:

while ((bar = in.readLine()) != null){
    String[] values = bar.split(",\\s*");
    y = 0;
    for (String str : values){
        double str_double = Double.parseDouble(str);
        array[x][y] = str_double;
        y++;
    }
    x++;
}