【Java基礎】鍵盤錄入Scanner類中的next()與nextLine()的問題

本來之前看視頻的時候講過這個問題,結果今天做練習的時候沒有注意,導致在for循環中鍵盤錄入String和int數據的時候,導致第二輪開始Scanner中的方法並沒有阻塞。大腦沒反應過來還以爲是循環的問題,之後想想找到了問題。如下:

System.out.println("請輸入商品名稱");
        String s1 = sc.nextLine();
System.out.println("請輸入商品數量");
        int count = sc.nextInt();
System.out.println("請輸入商品名稱");
        String s2 = sc.nextLine();
第一個nextLine()正常錄入,輸入完int之後結果就錄入完成了。

這是因爲在Scanner類中:
調用nextInt()方法時,我們鍵盤輸入10,其實錄入的是 10\r\n,所以第二個nextLine()方法讀取到\r\n就結束了。

總結:
next():從控制檯獲取字符串,如果字符串中包含空格,只會獲取第一個作爲接收的字符串。比如:輸入hello I am a chinese! 接收到的只是hello
nextLine():從控制檯獲取字符串,字符串中可以包含空格,以回車符作爲接收結束標誌。比如:輸入hello I am a chinese! 接收到的是hello I am a chinese!

所以在循環錄入時候,最好還是使用next()方法,如果需要輸入空格隔開的的字符串,可以通過指定結束標記來實現和nextLine()一樣錄入一整行的效果:

String s;
while(!sc.hasNext("quit"))
{
   s = sc.next();
   System.out.println(s);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章