我的要求是在我做国际象棋问题时提出的,其中 8X8 字符值是通过 System.in 给出的。我正在测试它,并且一直提供 64 个输入,这非常困难。现在,我想将其保留在文本文件中并读取它并将其存储在字符数组中。请帮助我这样做。有多种方法可以读取并显示文件的内容,也可以将其转换为一维字符数组。但是,我想知道它可以直接从 StringBuilder 转换为 2D 字符数组!!!!这是我尝试过的。
StringBuilder c = new StringBuilder();
File f = new File("file\\input.txt");
FileInputStream br = new FileInputStream(f);
int str;
while ((str = br.read()) != -1) {
c.append((char) str);
}
br.close();
System.out.println(c);
int strBegin = 0;
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input.length; j++) {
input[i][j] = c.substring(strBegin, strBegin + 1).toCharArray()[0];
strBegin++;
}
}
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input.length; j++) {
System.out.print(input[i][j] + " ");
}
System.out.println();
}
这里是文件 input.txt 的内容:
2345678
1 345678
12 45678
123 5678
1234 678
12345 78
123456 8
1234567
注意:还有一个对角线空间也必须存储到数组中。
当我运行代码时,我得到这个:
2345678
1 345678
12 45678
123 5678
1234 678
12345 78
123456 8
1234567
2 3 4 5 6 7 8
1 3 4 5 6
8
1 2 4
6 7 8
1 2
5 6 7 8
1 2 3 4 6 7 8
1 2 3 4 5
8
1 2 3 4
最佳答案
我建议您不要直接读取整行,然后将其转换为字符数组,而不是逐个字符读取
public static char[][] readChessFile(String filename) throws IOException {
char[][] input = new char[8][8];
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) {
String line;
for (int i = 0; i < input.length; i++) {
line = bufferedReader.readLine();
if (line == null || line.length() != 8) {
throw new IllegalStateException("File is not in correct format");
}
input[i] = line.toCharArray();
}
}
return input;
}
这是我的测试代码
try {
char[][] result = readChessFile(filename);
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.print(result[i][j]);
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
关于java - 如何将多行StringBuilder转换为字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58781028/