天天看點

java---next()和nextLine()的差別

next():

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

nextLine()

方法的結束符隻是Enter鍵,即nextLine()方法傳回的是Enter鍵之前的所有字元,它是可以得到帶空格的字元串的。

import java.util.Scanner;

public class NextAndnextLine {
	public static void main(String[] args) {
		String s1, s2;
		Scanner sc = new Scanner(System.in);
		System.out.print("請輸入第一個字元串:");
		s1 = sc.nextLine();
		System.out.print("請輸入第二個字元串:");
		s2 = sc.next();
		System.out.println("輸入的字元串是:" + s1 + "  " + s2);
	}
}
           

運作結果:

請輸入第一個字元串:home

請輸入第二個字元串:work

輸入的字元串是:home  work

但如果把程式改一下, s1=sc.next(); s2=sc.nextLine();

運作結果是:

請輸入第一個字元串:home

請輸入第二個字元串:

輸入的字元串是:home 

nextLine()自動讀取了被next()去掉的Enter作為他的結束符,是以沒辦法給s2從鍵盤輸入值。經過驗證,其他的next的方法,如double nextDouble()  , float nextFloat() , int nextInt() 等與nextLine()連用時都存在這個問題,解決的辦法是:在每一個 next()、nextDouble()、nextFloat()、nextInt() 等語句之後加一個nextLine()語句,将被next()去掉的Enter結束符過濾掉