2014-01-20 66 views
-1

說我有下面的代碼的Java:如何在控制檯程序中使用scanner.hasNextLine不按Ctrl + Z

Scanner scanner = new Scanner(System.in); 
while (scanner.hasNextLine()) { 
    line = scanner.nextLine(); 
    //do something 
    } 

而我在控制檯輸入的是這樣的。

Wayne Rooney 
Luis Nani 
Shinji Kagawa 

我想逐行讀這行。

但問題是hasNextLine塊在第三行後等待輸入的方法,因爲鍵盤(System.in)的輸入永遠不會到達EOF。

現在,我只需按Enter鍵就可以達到EOF?因爲我不想告訴用戶按Ctrl + z來運行我的程序。

它是如何做的?有什麼想法嗎?

我正在尋找Java方面的解決方案,而不是控制檯上的任何命令。

在此先感謝

+0

添加一個特殊的關鍵字(例如退出)。 – nhahtdh

+0

謝謝。但是,我不希望用戶做任何事情,除了只是輸入和按下輸入。 – shazinltc

+1

問題是,程序不知道你是否完成,或者你想在按下輸入後添加其他名稱。 – XWaveX

回答

1

它是如何做的?:通常通過向用戶顯示消息並請求某些特殊字完成輸入來完成。

public static void main(String[] args) throws IOException 
{ 
    Scanner scanner = new Scanner(System.in); 
    String line; 

    System.out.println("Enter names (\"QUIT\" to finish)"); 
    while (scanner.hasNextLine()) { 
     line = scanner.nextLine(); 
     if (line.equals("QUIT")) { 
      break; 
     } 
    } 
    // ... 
} 

在使用特殊字上面的例子是"QUIT",你當然會改變這更撥一個。

1

當你按兩次回車鍵,你最終讀一個空行。你可以測試這個:

while (scanner.hasNextLine()) { 
    line = scanner.nextLine(); 
    if (line.equals("")) 
     break; // this will exit the loop 
    //do something 
} 

現在,循環將結束,如果你按兩次輸入沒有之間輸入任何東西。

+0

謝謝,但正如我前面提到的,我想要一個不太侵入性的解決方案。我不希望用戶做任何其他的事情,除了輸入和輸入 – shazinltc

+2

@shazinltc:那麼沒有其他辦法。你需要以某種方式區分用戶輸入和信號到結束。 – nhahtdh

+0

你可以決定只處理最多3個名字,還有一種不同的方法可以做到這一點...... – tbodt

相關問題