首先,我把next()、nextInt()等方法当做一类来看待。next()方法会过滤掉前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其过滤掉,只有在读取到有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为结束符。所以next()方法不能得到带空格的字符串。
而nextLine()方法字面上有扫描一整行的意思,它的结束符只能是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
例如:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a = scan.next();
String b = scan.nextLine();
System.out.println(a);
System.out.println(b);
}
}
/*
input:
a b c
output:
a
b c
以上说明next()方法过滤掉了"a"前面的空格,遇到"a"后的空格后结束了输入,最后得到的结果是"a"。
接着nextLine()从"a"后开始读取,它读取了包括"a"之后空格的一整行数据,直到遇到"c"后的回车,最后读取到的数据是" b c"。
*/
/* 假如我们换种特殊输入呢?
input:
abc
output:
abc
以上我们只输入了"abc"和回车键,next()方法在读取到"abc"之后遇到回车结束,而nextLine()
方法则立即读到了回车并结束,所以nextLine()方法读到了一个空串。
*/