Как заполнить ArrayList массивами?

116
24 июня 2021, 17:10

Есть текстовый файл, в который записаны числа (каждое с новой строки) в таком формате: 1075
5018
6542
1456 и т.д Хочу создать ArrayList массивов и каждый массив этого листа заполнить цифрами из строки. Т.е в первом массиве будут цифры {1,0,7,5}, во втором {5,0,1,8} и так далее. И не знаю, как это сделать наиболее кратко. Подкиньте вариантов, пожалуйста.

List<int[]> list = new ArrayList<>();
    int[]square1=new int[4];
    int[]square2=new int[4];
    int[]square3=new int[4];
    int[]square4=new int[4];
    int[]square5=new int[4];
Scanner sc = new Scanner(new File("/Users/Anastasiya/Desktop/test.txt"));
String s = "";
while((s = sc.nextLine())!=null) {
    if (!s.isEmpty()) {
        for(int j = 0; sc.hasNextInt();j++){
            square1[j]=sc.nextInt();
        }
        list.add(square1);
    }

Но таким методом у меня, понятное дело, заполняется лишь первый массив. И вот как с помощью цикла заполнить все массивы?

Answer 1
List<int[]> list = new ArrayList<>();
Scanner sc = new Scanner(new File("/Users/Anastasiya/Desktop/test.txt"));
// цикл, пока есть числа
while (sc.hasNextInt()) {
  // считали число
  int num = sc.nextInt();
  // создали новый массив
  int[] cur = new int[4];
  // добавили его в список
  list.add(cur);
  for (int i = 3; i >= 0; i--) {
    // Нарезаем цифры
    cur[i] = num % 10;
    num /= 10;
  }
}
Answer 2

Если по минимуму, то вы можете создать массив внутри цикла и каждый раз переменная будет создаваться заново. А вот добавленный внутрь списка массив сохранится т.к. ссылка на него не будет стерта.

List<int[]> list = new ArrayList<>();
Scanner sc = new Scanner(new File("/Users/Anastasiya/Desktop/test.txt"));
String s = "";
while((s = sc.nextLine())!=null) {
    if (!s.isEmpty()) {
        int[] square = new int[4]; //изменение, используется одна переменная
        for(int j = 0; sc.hasNextInt();j++){
            square[j]=sc.nextInt();
        }
        list.add(square); 
    }
}
Answer 3

Если вы используете java8, то с этим очень легко и красиво справятся Stream`ы и классы для работы с файлами из пакета nio

public static void main(String[] args) throws IOException {
    List<int[]> list = new ArrayList<>();
    List<String> strings = Files.readAllLines(Paths.get("/Users/Anastasiya/Desktop/test.txt"), StandardCharsets.UTF_8);
    strings.forEach(s -> list.add(Arrays.stream(s.split("")).mapToInt(Integer::valueOf).toArray()));
    list.forEach(arr -> {
        for (int value : arr) {
            System.out.print(value);
        }
        System.out.println();
    });
}
READ ALSO
Поиск по enum. Java

Поиск по enum. Java

Всем привет! У меня есть два EnumВ одном написана стоимость, в другом предмет

259
Лямбда выражения, странности с телом лямбд

Лямбда выражения, странности с телом лямбд

Вопрос написал ниже в комментах кодаДа там два вопроса, но второй не отдельный вопрос, а лишь уточнение первого вопроса

73
Bootstrap + BootstrapVue. Как оптимизировать?

Bootstrap + BootstrapVue. Как оптимизировать?

Мы вроде бы избавляемся от jQuery и должны получить меньший размерjs файла, но в итоге он у меня получается ещё больше

105
Javascript. Формат переменной

Javascript. Формат переменной

У меня два вопроса: 1) Я передаю в функцию circle: number - начальная позиция круга, final - конец круга, selector - объект, c которым я буду работать, найденный...

92