2017-03-19 40 views
0
Scanner s = new Scanner (System.in); 
while(!s.nextLine().isEmpty()){ 

a.add(i, s.nextLine()); 
i++; 
} 

System.out.println(a.size()); 

我創建了一個Arraylist,因爲我複製並粘貼了未知數量的字符串到ide中進行掃描,這可能是行結束時的問題。Nextline和掃描器忽略Java中的行?

我被貼上他們三條線測試出例如採取下面的例子:

Hello 
World 
Again 

我會複製並粘貼在和ArrayList的大小是2,這將是世界這將佔據位置0.

我自己的理論是,他while循環採取第一行來檢查它是否爲空,然後第二行被放入Arraylist與第三被檢查和空白被放入第二個位置。

然後有三行格式的字符串粘貼,然後按輸入一次,這可能會影響行結束。有沒有人對發生了什麼有所瞭解?謝謝,

+2

相反而同時(試試。 hasNext()){ – altoids

+1

你已經回答了你自己的問題,你的理論是正確的。您應該在while條件中使用hasNext(),或者將s.nextLine()保存到變量中,並在add()調用中使用它。 – Thomas

回答

1

您需要「捕獲」要測試的行而不是扔掉它。每撥s.nextLine()讀一行。

Scanner s = new Scanner (System.in); 
String line; 
while(!(line = s.nextLine()).isEmpty()){ 
    a.add(i, line); 
    i++; 
} 

System.out.println(a.size()); 

或者像其他人所說的,你可以使用s.hasNext()作爲循環條件如下:(!s.nextLine()的isEmpty())

Scanner s = new Scanner (System.in); 
while(s.hasNext()) { 
    a.add(i, s.nextLine()); 
    i++; 
} 

System.out.println(a.size()); 
+1

或者,像@altoids建議的那樣,使用'Scanner#hasNext()'來查看是否有另一個令牌可用。 –

+0

完美工作,我看到我錯了。謝謝! – manyo