Java Scanner, принимая пользовательский ввод из консоли в список массивов как отдельные слова - PullRequest
0 голосов
/ 02 октября 2011

Я пытаюсь прочитать пользовательский ввод с консоли непосредственно в список массивов, разделенных каждым словом или сущностью, имеющей пробел с обеих сторон (поведение по умолчанию).Проблема в том, что я застрял внутри цикла while.Scanner.next () продолжает ждать большего ввода, хотя я знаю, что хочу прекратить подачу ввода после того, как пользователь нажимает return:

Scanner input = new Scanner(System.in);

    System.out.print("Enter a sentence: ");
    do {
        if (words.add(input.next());

    } while (input.hasNext());

    System.out.println(words);

Я ввожу строку, за исключением того, что мне придется нажимать CTRL-Dпрекратить его (т. е. сигнал окончания ввода).Я просто хочу автоматически завершить его, когда в конце предложения нажимается символ возврата \ n.

Ответы [ 3 ]

2 голосов
/ 02 октября 2011

Может быть проще использовать сплит для того, что вы хотите.

// read a line, split into words and add them to a collection.
words.addAll(Arrays.asList(input.nextLine().split("\\s+")));
1 голос
/ 02 октября 2011

Вы всегда можете использовать класс Console, например:

Console console = System.console();

System.out.print("Enter a sentence: ");

List<String> words = Arrays.asList(console.readLine().split("\\s+"));

System.out.println(words);

Метод readline () должен решить проблему \ n.

Если вам требуется сканер длявозможности чтения типа, вы можете смешивать оба класса:

Scanner scanner = new Scanner(console.reader());

Надеюсь, это поможет!

0 голосов
/ 02 октября 2011

Вы можете вызвать input.hasNextLine и input.nextLine, чтобы получить строку, а затем создать новый сканер для полученной строки и использовать имеющийся код.Не самое дешевое решение, но простой способ реализовать его, пока не придумаете лучшее: -)

...