2014-03-30 55 views
1

我正在做家庭作業,我必須閱讀nextLine()方法的輸入。當我複製所有輸入行並粘貼在控制檯上時,程序不會讀取最後一行。我怎麼解決這個問題。如何閱讀Scanner.nextLine()的最後一行?

我需要的:

line1 
line2 
line3 

我能得到什麼:

line1 
line2 

這裏是我的代碼

public class Name{ 
    public static void main(String [] args){ 
     Scanner scn = new Scanner(System.in); 
     str = scn.nextLine(); 

     while(scn.hasNextLine()){ 
     . 
     . 
     . 
     str = scn.nextLine(); 
     } 
     scn.close(); 
    } 
} 

回答

5

我看不出有任何理由要檢查null - 你應該使用scn.hasNextLine()代替,這將停止迭代,當沒有更多的行在文件爲Scanner來閱讀。

下面是一個代碼示例 - 我們將System.in的讀數移動到循環中,並添加一個停止條件,以免發生無限循環。

Scanner scn = new Scanner(System.in); 
String str; 

while(scn.hasNextLine()){ 
    str = scn.nextLine(); 
    System.out.println(str); 
    if(str.equalsIgnoreCase("stop")) { 
     break; 
    } 
} 
3

如何

public void main(String [] args){ 
    Scanner scn = new Scanner(System.in); 
    while (scn.hasNextLine()) { 
     String str = scn.nextLine(); 
     System.out.println(str); 
    } 
    // don't close System.in as we didn't create it. 
} 

當我運行

$ cat > text 
line1 
line2 
line3 
^D 
$ java -cp . Example < text 
line1 
line2 
line3 
+0

輸出相同:( – user3460845

+0

@你在做別的事情不對的情況下user3460845。見我的例子顯示代碼起作用。 –