天天看點

Scanner中的next()與nextLine()的差別

1.next()一定要讀取到有效字元後才可以結束輸入,對輸入有效字元之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動将其去掉,隻有在輸入有效字元之後,next()方法才将其後輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。簡單地說,next()查找并傳回來自此掃描器的下一個完整标記。完整标記的前後是與分隔模式比對的輸入資訊,是以next方法不能得到帶空格的字元串而nextLine()方法的結束符隻是Enter鍵,即nextLine()方法傳回的是Enter鍵之前的所有字元,它是可以得到帶空格的字元串的。

2.同樣對于nextInt()、nextDouble()等和next一樣一定要讀取到有效字元後才可以結束輸入,對輸入有效字元之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動将其去掉,隻有在輸入有效字元之後,next()方法才将其後輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。

3.是以如果next()或者nextInt()等下面有nextLine()時,中間要再加一句nextLine()用來接收next()或者nextInt()等過濾的回車、tab、空格。這樣才能讓下面的nextLine()生效,否則它就接收了enter、tab、空格等,導緻使用者沒有輸入就結束了。

eg:

下面的就是錯誤的:

System.out.println("請輸入編号:");

int num=sc.nextInt();

System.out.println("請輸入姓名;");

String name=sc.nextLine();

這樣在輸入的時候,輸入編号之後,按enter鍵,發現name是空的,其實name存儲的是被sc.nextInt()當作結束符的enter。

正确的是:

System.out.println("請輸入編号:");

int num=sc.nextInt();

sc.nextLine();//接收被過濾的enter

System.out.println("請輸入姓名;");

String name=sc.nextLine();