Как преобразовать многострочный StringBuilder в массив символов? - PullRequest
0 голосов
/ 09 ноября 2019

Мое требование пришло, когда я занимался шахматной задачей, в которой значения 8X8 были заданы через System.in. Я тестировал его и все время выдавал 64 материала, что было довольно сложно. Теперь я хотел сохранить то же самое в текстовом файле, прочитать его и сохранить в массиве символов. Пожалуйста, помогите мне сделать это. Есть несколько способов, которые просто читают и отображают содержимое файла, или мы можем преобразовать в одномерный массив символов. Но мне было интересно, что его можно напрямую преобразовать из StringBuilder в двумерный массив символов !!!! Вот что я попробовал.

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 

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вместо того, чтобы читать символ за символом, я предлагаю вам прочитать всю строку напрямую и затем преобразовать ее в массив символов

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();
}
0 голосов
/ 10 ноября 2019

Вот один из способов сделать это.

Я выделяю первую часть массива 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();
      }

...