Разделить ввод строки из файла в массив с помощью сканера - PullRequest
0 голосов
/ 13 февраля 2020

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

pizza, fries, eggs.
1, 2, 4.

Я сканирую этот .txt с использованием класса Scanner и хочу вставить входные данные в ArrayList. Я знаю, что есть метод для разделения строк и использования "," в качестве разделителя, но я не могу найти, как и где это применить. Примечание: . используется как его собственный разделитель, поэтому сканер знает, что ему нужно проверить следующую строку и добавить ее в другой ArrayList.

Вот мой соответствующий код из класса с установкой ArrayList:

public class GrocerieList {

    static ArrayList<String> foodList = new ArrayList<>();
    static ArrayList<String> foodAmount = new ArrayList<>();
}

А вот код класса, сканирующего ввод .txt:

public static void readFile() throws FileNotFoundException {
        Scanner scan = new Scanner(file);
        scan.useDelimiter("/|\\.");
        scan.nextLine(); // required because there is one empty line at .txt start

        if(scan.hasNext()) {
            GrocerieList.foodList.add(scan.next());
            scan.nextLine();
        }
        if(scan.hasNext()) {
            GrocerieList.foodAmount.add(scan.next());
            scan.nextLine();
        }
    }

Где я могу разбить строки? И как? Возможно, мой подход ошибочен, и мне нужно изменить его? Спасибо за любую помощь, спасибо!

Ответы [ 3 ]

3 голосов
/ 13 февраля 2020

Используйте nextLine(), чтобы прочитать строку из файла, затем исключите завершающий период и разделите запятыми.

И используйте try-with-resources , чтобы правильно закрыть файл .

public static void readFile() throws FileNotFoundException {
    try (Scanner scan = new Scanner(file)) {
        scan.nextLine(); // required because there is one empty line at .txt start
        GrocerieList.foodList.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(",\\s*")));
        GrocerieList.foodAmount.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(",\\s*")));
    }
}
1 голос
/ 13 февраля 2020

Самый простой способ сделать это - использовать String # split. Кроме того, вы не хотите 'next', но nextLine

GrocerieList.foodList.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(", ")));

(Должно работать, но не проверялось).

Для получения дополнительной информации о сканере класс относится к https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

1 голос
/ 13 февраля 2020

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

  String lineContent = scan.nextLine();
  String[] components = lineContent.split(","); //now your array has "pizza", "fries", "eggs" etc.
...