我试图将控制台中的用户输入直接读入数组列表,由每个单词或实体分隔,每个单词或实体两边都有空格(默认行为)。问题是我被困在了一个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'字符时自动结束它。
答案 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并使用您现在拥有的代码。不是最便宜的解决方案,而是一种简单的方法来实现它,直到你想出一个更好的解决方案: - )