[英]How to convert a multi-line StringBuilder to a character array?
My requirement came when I was doing a chess problem wherein 8X8 character values were given through System.in.当我做一个国际象棋问题时,我的要求来了,其中通过 System.in 给出了 8X8 字符值。 I was testing it and all the time I was giving 64 inputs that was pretty hard.我正在对其进行测试,并且一直在提供 64 个输入,这非常困难。 Now, I wanted to keep the same in a text file and read it and store it in a character array.现在,我想在文本文件中保留相同的内容并读取它并将其存储在字符数组中。 Please help me to do so.请帮我这样做。 There are multiple ways those just read and display the contents of the file or we can convert into a 1D char array.有多种方法可以读取和显示文件的内容,或者我们可以转换为一维字符数组。 But, I was wondering that it can be directly converted from a StringBuilder to a 2D character array.!!!但是,我想知道它可以直接从 StringBuilder 转换为 2D 字符数组。!!! Here is what I have tried.这是我尝试过的。
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();
}
Here, the contents of the file input.txt:这里,文件 input.txt 的内容:
2345678
1 345678
12 45678
123 5678
1234 678
12345 78
123456 8
1234567
Note: There is a diagonal space that also has to be stored into the array.注意:还有一个对角线空间也必须存储到数组中。
When I run the code, I get this:当我运行代码时,我得到了这个:
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
Rather than reading character by character I suggest you read a whole line directly and convert it to an array of char afterwards我建议您直接阅读整行,然后将其转换为 char 数组,而不是逐个字符地阅读
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;
}
And here is my test code这是我的测试代码
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();
}
Here is one way to do it.这是一种方法。
I allocate the first part of the two d array via我通过分配两个 d 数组的第一部分
char[][] chars = new char[8][];
The rest will be assigned from the String. rest 将从字符串中分配。
char[][] chars = new char[8][];
try {
BufferedReader br =
new BufferedReader(new FileReader("input.txt"));
String s;
int i = 0;
while ((s = br.readLine()) != null) {
// assign the converted string array to chars[i]
chars[i++] = s.toCharArray();
}
br.close();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
// now print them out, char by char.
for (int i = 0; i < chars.length; i++) {
for (int k = 0; k < chars[i].length; k++) {
System.out.print(chars[i][k]);
}
System.out.println();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.