Разделение строк из ряда пользовательских данных - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю над проблемой, которая включает чтение пользовательской строки до тех пор, пока пользовательский ввод не станет пустым, после чего пробелы разделяются и печатаются. До сих пор мне удавалось разделить пробелы, но когда вводится несколько пользовательских вводов, он разбивает и печатает только первую строку. Пожалуйста, посмотрите изображение моего кода ниже, чтобы получить лучшее представление. Любая помощь будет принята с благодарностью!

import java .util.Scanner;

publi c class LineByLine {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (true) {
        String input = scanner.nextLine();

        if (input.equals("")) {
            break;
        }
        if (input.contains(" ")) {
            String[] tokens = input.split(" ");

            // Then print them 
            for (String token : tokens) {
                System.out.println(token);

            }

        }

    }
}

}

Ответы [ 2 ]

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

Проблема связана с тем, как вы организовали свой код. Вы набираете readLine(), а затем звоните readLine() в if/else, затем распечатываете предыдущие токены, а затем снова вызываете readLine() без обработки предыдущего.

public class LineByLine {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            String input = scanner.nextLine();
            // check for empty line immediately.
            if (input.equals("")) {
                break;
            }
            // otherwise split it (and use the regular expression for one
            // more white spaces).
            String[] tokens = input.split("\\s+");

            // Add space for additional tokens.
            allTokens = Arrays.copyOf(allTokens, allTokens.length + tokens.length);
            // copy new tokens to array.
            int i = allTokens.length - tokens.length;
            for (String v : tokens) {
                allTokens[i++] = v;
            }
        }

        for (String token : allTokens) {
            System.out.println(token);
        }
    }
}

Я изменил ваш массив от whiteSpace до tokens, так как вы на самом деле не экономите пробелы.

Использование ArrayList вместо массива.

Инициализация в начале.

List<String> allTokens = new ArrayList<>();

Добавление элементов.

for (String str : tokens) {
   allTokens.add(str);
}

Когда закончите, напечатайте их.

for (String str : allTokens) {
   System.out.println(str);
}
0 голосов
/ 26 февраля 2020

Используйте while (scanner.hasNext()) и удалите условие if / else. Тогда ваш код может работать.

...