Java, как прочитать строку из текстового файла, который имеет несколько строк и двойных значений? - PullRequest
0 голосов
/ 21 октября 2018

Я хочу создать программу, которая читает текстовый файл с тремя различными частями, а затем выводит имя.Например, текстовый файл:

vanilla   12   24
chocolate   23  20
chocolate chip  12   12

Однако в третьей строке есть небольшая проблема, так как есть пробел.Пока что мой код работает для первых двух строк, но затем выдает исключение InputMismatchException для третьей.Как мне сделать так, чтобы он читал оба слова из одной строки, а затем выводил их?Мой соответствующий код:

    while (in.hasNext())
{
    iceCreamFlavor = in.next();
    iceCreamRadius = in.nextDouble();
    iceCreamHeight = in.nextDouble();

out.println("Ice Cream: " + iceCreamFlavor);
}

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Вы можете использовать scanner.useDelimiter для изменения разделителя или использовать регулярное выражение для анализа строки.

//sets delimiter to 2 or more consecutive spaces
Scanner s = new Scanner(input).useDelimiter("(\\s){2-}");

Проверьте Сканер Javadoc для примеров:

0 голосов
/ 21 октября 2018

В вашем входном файле разделитель между полями состоит из нескольких пробелов, нет?если да, вы можете просто использовать метод split объекта String.

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

String[] splitString = myString.split("   ");

Первый элемент «0» - это строка, два других можно проанализировать как double

Это может выглядеть так:

    try (BufferedReader br = new BufferedReader(new FileReader("path/to/the/file.txt"))) {
        String line;
        while ((line = br.readLine()) != null) {
            String[] lineSplitted = line.split("   ");
            String label = lineSplitted[0];
            double d1 = Double.parseDouble(lineSplitted[1]);
            double d2 = Double.parseDouble(lineSplitted[2]);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...