-1

在将 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 岁的孩子那样解释一些事情吗?

谢谢,

密码猴

4

2 回答 2

0

既然你这样做

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

您将获得数字的ASCII 值

在 LHS 上,您有一个int,在 RHS 上,您有一个charAt()返回char. 因此,RHS 上 char 的 ASCII 值被分配给intLHS 上的 。

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

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

你会得到一个-1介于两者之间的,因为你是\n在你的字符串中手动添加一个。删除它,它不会显示-1

// stringBuffer.append("\n"); // This is unnecessary. Comment it out.
于 2013-10-28T07:35:44.567 回答
0

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

并考虑删除数据中的空间

 String data =  stringBuffer.toString().trim();
 data = data.replaceAll("\\s+", " ");
于 2013-10-28T07:45:02.123 回答