最近自学java,学到了Scanner类这块,我想着测试一下输入,遇到了个问题,我想要输入两个字符串,但是我输入一个字符串后程序就停止运行了,有点疑惑,我的代码如下
s1=scan.next();
System.out.print(s1);s2=scan.nextLine();
System.out.print(s2);
结果就是只能输出s1,然后我就想起来这两种输入方式的区别
next() 与 nextLine() 区别
next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4、next() 不能得到带有空格的字符串。nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
输入一个字符串后我们会按回车结束,我们按的回车键也会送入键盘缓冲区作为输入的一部分只不过会被转化为换行符,而且这两种方法都不会把输入的回车给取走,也就是说输入s1的时候输入字符串+回车,next()仅仅是把字符串取走,回车还留在缓冲区中,这样程序接着执行到next()的时候nextLine()就会取走回车,因为nextLine()取字符串是以回车为结束标志,所以就会造成以上问题,只能输入一个有效的字符串。
要解决这个问题,只需要在第一个next后在加一个nextLine()取走进入缓冲区的回车符,这样程序执行到下一个nextLine()时就会等待我们输入下一个字符串了,如下:
s1 = scan.next();
System.out.print(s1);
scan.nextLine(); // 取走回车键
s2 = scan.nextLine();
System.out.print(s2);
需要注意的是:不能使用next()来取回车键,因为像上面说过的对输入有效字符之前遇到的空白,next() 方法会自动将其去掉,对next()来说回车键不是一个有效字符所以会自动将它去掉,然后等待用户输入下一个有效字符串。
使用nextLine()因为它以回车为结束符,遇到回车就会停止读取字符并返回回车前取到的字符串(会将回车符消耗掉),这里就是返回一个空字符。