Чтение двумерного массива с консоли с помощью Enter

Как сделать чтобы при вводе в консоль например "1 2 3 4 5" я нажал Enter и это была первая строка массива.Потом так несколько раз. А чтобы закончить ввод нужно просто нажать Enter не вводя ничего. + как реализовать сравнение строк чтобы если они были неодинаковые, то высветилось сообщение о том, что они не равны и нужно ввести массив заново

public static int[] toIntArray(String str) {
      Scanner scanner = new Scanner(str);
      scanner.useLocale(Locale.ROOT);
      scanner.useDelimiter("(\\s|[,;])+");
      List<Integer> list = new ArrayList<>();
      while (scanner.hasNext()) {
          list.add(scanner.nextInt());
      }

      // из List<Integer> можно получить Integer[]
      Integer[] arr = list.toArray(new Integer[0]);
      // Integer[] -> int[]
      int[] result = new int[arr.length];
      for (int i = 0; i < arr.length; i++) {
          // автоматическая распаковка из объекта
          result[i] = arr[i];
      }
      return result;
  }

  public static int[] readIntArrayFromConsole() {
      Scanner scanner = new Scanner(System.in);
      while (true) {
          try {
              System.out.print("Введите массив: ");
              String line = scanner.nextLine();
              return toIntArray(line);
          } catch (Exception e) {
              System.out.print("Вы ошиблись, попробуйте еще раз! \n");
          }
      }
  }```
Я смог сделать ввод одномерного массива в консоли, но мне кажется что даже этот код можно сделать проще

Ответы (1 шт):

Автор решения: Алексей Р

Вариант. Если очередная строка с числами некорректная (их кол-во не равно кол-ву в первой строке или это не числа), то предлагается ввести эту строку, а не весь массив, заново.

import java.util.*;

public class Main {
    public static int[] toIntArray(String str) {
        ArrayList<Integer> list = new ArrayList<>();
        for (String l : str.split(" ")) {
            try {
                list.add(Integer.parseInt(l));
            } catch (Exception e) {
                return null;
            }
        }
        return list.stream().mapToInt(i -> i).toArray();
    }

    public static int[][] readIntArrayFromConsole() {
        Scanner scanner = new Scanner(System.in);
        int[] a;
        int len = 0;
        int counter = 0;
        String line;
        ArrayList<int[]> arr = new ArrayList<>();
        System.out.println("Введите массив построчно, разделяя элементы пробелами");
        while (true) {
            System.out.printf("Строка %d:", counter);
            line = scanner.nextLine();
            if (line.strip().length() == 0) break;
            a = toIntArray(line);
            if (a != null && (len == 0 || len == a.length)) {
                len = a.length;
                arr.add(counter++, a);
            }
        }
        int[][] res = new int[arr.size()][len];
        for (int i = 0; i < arr.size(); i++) res[i] = arr.get(i);
        return res;
    }

    public static void main(String[] args) {
        System.out.println(Arrays.deepToString(readIntArrayFromConsole()));
    }
}
Введите массив построчно, разделяя элементы пробелами
Строка 0:1 2 3
Строка 1:4 5 6
Строка 2:aa bb cc
Строка 2:7 8 9
Строка 3:11 12
Строка 3:11 12 13
Строка 4:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [11, 12, 13]]
→ Ссылка