标准输入流通常永远不会结束,如果您没有指出。你的程序如何知道,用户没有输入另一行?
所以,你应该只读的,你明确地知道将获得进入线,这样的:
Scanner input = new Scanner(System.in);
String first = input.nextLine();
String second = input.nextLine();
input.close();
System.out.println(first);
System.out.println(second);
如果你想有一个可变的行数,你应该用你的while循环去,但正如Christian建议的那样,用户必须指出输入的结尾。这样的:
Scanner input = new Scanner(System.in);
StringBuilder builder = new StringBuilder();
while (input.hasNext()) {
builder.append(input.nextLine()).append(System.lineSeparator());
}
input.close();
System.out.println(builder.toString());
运行是将无限循环(貌似)。但是当按下CTRL-Z时,您将结束输入并且input.hasNext()
将返回false。 (请注意,CTRL-Z适用于Linux和Windows。)
编辑按欧文Bolwidt的评论基督教的回答:
如果要重定向标准输入流,所以它例如从一个文件时,EOF标记(文件末尾读取)会指示扫描仪输入的结束。所以显然不涉及用户交互,程序仍然会正确运行。
需要有一个更好的退出,如果你按下Ctrl-Z程序不能得到更多的处理/程序将退出。添加一些System.out.printlns ...看到我编写的第二个示例,并可以运行 – tgkprog