问题引入
刚学Java时经常使用到Scanner类,其接受键盘输入的字符串方法有两种: .next()和.nextLine(),讨论他们的区别。
使用 .next() 和 .nextLine()先后接受两次键盘输入,然后打印输入的内容
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("第一次输入");
String s1 = input.next();
System.out.println("第二次输入");
String s2 = input.nextLine();
System.out.println("第一次输入内容:" + s1 + "\t第二次输入内容:" + s2);
}
}
运行,输入 1 ,然后回车,发现还没进行第二次输入,系统就开始打印输入内容了
image.png如果调换一下顺序,先使用 .nextLine(),在使用 .next(),可以正常录入两次键盘输入
image.pngnext() 和 nextLine()的区别
接收内容
next()
1. 不接收空格,只接收有效字符,不能得到一个带空格的字符串
2. next在没有读到有效字符前会把空格、Tab、Enter自动去掉
nextLine()
1. 可以接受空格,能得到带空格的字符串
2. 返回的是Enter之前的一切字符
停止接受
next()
next()在读到有效字符后才会将空格、Tab、Enter视为结束符
nextLine()
nextLine()将Enter视为结束
注意:next()在遇到Enter结束时,并不会吸收Enter; 而nextLine()会吸收Enter。
何谓吸收?
next()遇到Enter结束,此时键盘录入Enter 的信息仍然停留在内存中, 下次需要输入时,直接读取了该信息。因此本文开头的代码运行时,首先输入1然后回车之后,next()结束,键盘录入Enter的信息没有被吸收,然后被nextLine()吸收并作为结束符。才导致了最后的运行结果。
补充说明
经过验证,除了nextLine()其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等,都无法吸收Enter。
如何解决?
可以多使用一次nextLine(),用停留在内存中的Enter吸收掉。
网友评论