Java Scanner,将用户输入从控制台输入到数组列表中作为单独的单词

时间:2011-10-02 17:58:19

标签: java arraylist java.util.scanner next

我试图将控制台中的用户输入直接读入数组列表,由每个单词或实体分隔,每个单词或实体两边都有空格(默认行为)。问题是我被困在了一个while循环中。 Scanner.next()一直在等待更多的输入,虽然我知道我想在用户按下返回后停止输入输入:

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才能终止它(IE。信号输入结束)。我只想在句子末尾按下返回'\ n'字符时自动结束它。

3 个答案:

答案 0 :(得分:2)

将split用于您想要的内容可能更简单。

// read a line, split into words and add them to a collection.
words.addAll(Arrays.asList(input.nextLine().split("\\s+")));

答案 1 :(得分:1)

您可以随时使用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());

希望这有帮助!

答案 2 :(得分:0)

您可以调用input.hasNextLine和input.nextLine来获取一行,然后为您获得的行创建一个新的Scanner并使用您现在拥有的代码。不是最便宜的解决方案,而是一种简单的方法来实现它,直到你想出一个更好的解决方案: - )