在将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
答案 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+", " ");