从文件中取出String,然后将每个数字放入2D数组中。 (JAVA)

时间:2013-10-28 07:31:12

标签: java arrays parsing 2d

在将stringBuffer解析为2D数组时,我遇到了很多问题。

这就是我想要实现的目标....

这是我的一个文件的示例。

 123456789
 123456789
 123456789
 123456789
 123456789
 123456789
 123456789
 123456789
 123456789

如果我只是手动将其写入Java,我会得到......

int[][] board = {
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},
   {1,2,3,4,5,6,7,8,9},       
};

但我正在尝试为我们创建一个方法,因为我正在加载许多不同的文件。

这是我的代码。

        int[][] board = new int[9][9];

        File file = new File ("keiron.sud");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        StringBuffer stringBuffer = new StringBuffer();
        String newline;
        while ((newline = bufferedReader.readLine()) != null) {
            stringBuffer.append(newline);
            stringBuffer.append("\n");
        }
        fileReader.close();
        String data =  stringBuffer.toString();
        int counting = data.length();
        int counter = 0;

        int i,j;

        for(i = 0; i<9; i++) {
            for (j =0; j < 9; j++) {
                int numbers = data.charAt(counter);
                counter++;

            board[i][j] = numbers;

            }
        }
        Print(board);

这是我得到的输出

49 50 51 52 53 54 55 56 57 
10 49 50 51 52 53 54 55 56 
57 10 49 50 51 52 53 54 55 
56 57 10 49 50 51 52 53 54 
55 56 57 10 49 50 51 52 53 
54 55 56 57 10 49 50 51 52 
53 54 55 56 57 10 49 50 51 
52 53 54 55 56 57 10 49 50 
51 52 53 54 55 56 57 10 49

这真的没有用!

我对Java很新,所以请你解释一下5岁的事情!

谢谢,

CodeMonkey

2 个答案:

答案 0 :(得分:0)

因为你正在这样做

int numbers = data.charAt(counter); // char to int

你得到了ASCII values的数字。

在LHS上你有一个int,在RHS上你有一个方法charAt(),它返回一个char。因此,RHS上char的ASCII值被分配给LHS上的int

要获取实际数值,请使用此

int numbers = Character.getNumericValue(data.charAt(counter)); // fetches the numeric value

您之间会得到-1,因为您在字符串中手动添加了\n。删除它,它不会显示-1

// stringBuffer.append("\n"); // This is unnecessary. Comment it out.

答案 1 :(得分:0)

int numbers = data.charAt(counter);替换为int numbers = data.charAt(j)-'0';

并考虑删除数据中的空格

 String data =  stringBuffer.toString().trim();
 data = data.replaceAll("\\s+", " ");