从键盘接收输入需要用到Scanner
类, Scanner
类中方法 next()
与 nextLine()
用于判断释放还要输入。两个的区别如下:
1. next()
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,
next()
方法会自动将其去掉。 - 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next()
不能得到带有空格的字符串。
2. nextLine()
- 以Enter为结束符,
nextLine()
方法返回的是输入回车之前的所有字符。 - 可以获得空白。
举个例子:
输入以下内容,分别使用 next()
和 nextLine()
接收:
1. Today is sunny!
How are you. end
使用 next()
接收:
Scanner in = new Scanner(System.in);
while (in.hasNext()){
String cur = in.next();
System.out.println(cur);
}
以上代码的运行结果如下:
使用 nextLine()
接收:
Scanner in = new Scanner(System.in);
while (in.hasNextLine()){
String cur = in.nextLine();
System.out.println(cur);
}
以上代码的运行结果如下:
3. 注意事项
不能混合使用 next()
和 nextLine()
接收输入,也不能混合使用 nextInt()
和 nextLine()
接收。
不能使用的原因不是语法不对,而是使用这两种来接收数字和字符串时,需要额外处理。比如,有一个输入
1 2 3
Today is sunny.
如果使用以下方式混合接收:先接收3个数字,后接收字符串。
Scanner in = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
int cur = in.nextInt();
System.out.println(cur);
}
while (in.hasNextLine()) {
String s = in.nextLine();
System.out.println(s);
}
以上代码的运行结果如下:
会发现结果不如预想中的接收到3个数字和1个字符串。这是因为 s
接收的是一个换行符,并不是输入的字符串。
使用 nextInt()
在接收完3个数字之后,接收输入的位置是停留在数字 3
后的一位,再使用 nextLine()
接收输入时,就会接收到换行符。