今天在看视频实现一个很简单的从键盘输入再输出的问题,结果发现先使用next(),在使用nextLine()时无法获取字符串,程序如下:
import java.util.Scanner;
public class InputString {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个:");
String s = sc.next();
System.out.println(s);
System.out.println("请输入第二个:");
String s1 = sc.nextLine();
System.out.println(s1);
}
}
结果如下:
请输入第一个:
sss
sss
请输入第二个:
Process finished with exit code 0`
发现在输入第二个时无法输入而直接输出了,通过查阅发现原因:
nextLine()会把 nextInt(),next(),nextDouble(),nextFloat()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextLine便已经转向了下一条语句执行。
scanner获取输入的整型变量时(nextInt),将换行符之前的数字获取,不包括之后的换行符;但是nextLine方法是将缓存区中所有的全部获取到,因此nextInt留下来的换行符会被nextLine先获取,导致没法再次输入字符串。
解决方法:
在每一个 nextInt(),next(),nextDouble(),nextFloat()后都加一个nextLine()语句,将被next()去掉的Enter过滤掉。
参考:https://blog.csdn.net/gg543012991/article/details/52900592