【问题标题】:How to convert a multi-line StringBuilder to a character array?如何将多行 StringBuilder 转换为字符数组?
【发布时间】:2019-11-09 16:02:27
【问题描述】:

当我做一个国际象棋问题时,我的要求来了,其中通过 System.in 给出了 8X8 字符值。我正在对其进行测试,并且一直在提供 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 

【问题讨论】:

  • 输出应该是什么样子?
  • 和文件格式一样..但是应该在那个char数组里。

标签: java arrays string char stringbuilder


【解决方案1】:

建议你直接读一整行,然后将其转换为字符数组,而不是逐个字符地阅读

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();
}

【讨论】:

    【解决方案2】:

    这是一种方法。

    我通过分配两个d数组的第一部分

    char[][] chars = new char[8][];
    

    其余的将从字符串中分配。

          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();
          }
    
    

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2020-09-28
      • 2013-06-21
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多