標準輸入流通常永遠不會結束,如果您沒有指出。你的程序如何知道,用戶沒有輸入另一行?
所以,你應該只讀的,你明確地知道將獲得進入線,這樣的:
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