先说结论:
1.next()方法不会读取有效字符前的空白字符,包括回车和空格。而且在读取有效字符后指针的位置就在其末尾(当前行)。
2.nextLine()方法可以读取当前行的所有字符,包括空白字符。而且在读取后指针的位置会移到下一行开头。
第一点证明如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
for(int i=0;i<4;i++) {
System.out.println(i+":"+sc.next());
}
}
}
结果如下:
分析说明:
输入“【空格】【空格】【空格】 3”,前面的空格被忽略,只输出有效字符3。输入“12【空格】【空格】【空格】13”,第一次循环只读取12,指针停在有效字符12的末尾,第二次循环自动开始,忽略空格读取到13,就造成了“1:12”和“2:13”连续出现的情况。
第二点证明如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
sc.next();
for(int i=0;i<5;i++) {
System.out.println(i);
if(sc.nextLine().length()==0) continue;
}
}
}
结果如下:
分析说明:
输入“123”后,next()方法的指针停在了有效字符末尾,所以在循环体使用nextLine()时,实际上执行了两次,第一次nextLine()读取了空白字符,continue结束。第二次则重新开始等待输入,所以就出现“0”和"1"连续出现的情况。