Двумерный массив символов в текстовом файле с пустыми пробелами в java

#java #arrays #loops

#java #массивы #циклы

Вопрос:

У меня есть текстовый файл, содержащий результаты команд по медалям, каждая строка представляет общее количество медалей команды в пяти играх, а каждый символ — медаль в одной игре:

 GSGBS
SSBGG
G SB
  

Я использовал scanner для преобразования файла в строку:

 String fileName = keyboard.nextLine();
Scanner teamMedals = new Scanner (new File (fileName));
  

Затем я использовал цикл while для печати медалей каждой команды:

     int teamNumber = 0;
    while (teamMedals.hasNext()) {
         String x = teamMedals.nextLine();
         teamNumber  = 1;
         System.out.println("Team #"   teamNumber   "medals: "   x);
    }
  

Я создал этот пустой двумерный массив для заполнения оценками:

 int numberOfGames = 5
char [] [] teamScoresArray = new char [teamNumber][numberOfGames.length];
  

Мне нужно заполнить каждый элемент вложенного массива одним символом каждой команды.
таким образом, результат будет выглядеть следующим образом:

 [['G','S','G','B','S'],['S','S','B','G','G'],['G',' ','S','B',' ']]
  

Проблема в том, что из-за наличия пустых пробелов и новых строк я продолжаю получать эту ошибку:

Исключение в потоке «main» java.lang.Исключение ArrayIndexOutOfBoundsException: 0

Комментарии:

1. Не могли бы вы поделиться еще немного своим кодом?

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

3. это приведено в начале задачи 3

4. Можете ли вы показать код, в котором вы заполняете массив?

5. Я не могу найти один

Ответ №1:

Не используйте Scanner для простого чтения строк текстового файла. Используйте BufferedReader для повышения производительности.

 char[][] array;
try (BufferedReader in = new BufferedReader(new FileReader(fileName))) {
    List<char[]> list = new ArrayList<>();
    for (String line; (line = in.readLine()) != null; )
        list.add(line.toCharArray());
    array = list.toArray(new char[list.size()][]);
}
  

А еще лучше, используйте Files.lines(Path path) потоковую обработку (Java 8 ):

 char[][] array = Files.lines(Paths.get(fileName))
                      .map(String::toCharArray)
                      .toArray(char[][]::new);
  

Вывод

 System.out.println(Arrays.deepToString(array));
  
 [[G, S, G, B, S], [S, S, B, G, G], [G,  , S, B,  ]]