项目场景:
使用Scanner的nextLine()方法获取数据的时候出现了问题,一般发生在和next(),nextInt()等类似方法混用的时候
问题描述
例如:以下这段代码,本意应该是在控制台输入两行数据,输入一行立刻输出一行。
Scanner in = new Scanner(System.in);
String s1=in.next();
System.out.println(s1);
String s2=in.nextLine();
System.out.println(s2+"==");
实际上输出的结果
可以看到我明明只输入了一行代码却执行完了
原因分析:
输入完按下回车时,next()或者nextInt()会读取有效数据并把光标停在回车之前,这样nextLine()会读到上一行代码遗留的那个回车键然后直接输出,从而产生以上问题
解决方案:
连续读取的时候都采用nextLine()方法,不要和next()或者nextInt()混用,虽然nextLine()方法也会读取有效数据并把光标停在回车之前,但是第二个nextLine()方法会自动识别第一个回车和第二个回车之间的数据,代码可以这样改:
Scanner in = new Scanner(System.in); String s1=in.nextLine(); System.out.println(s1); String s2=in.nextLine(); System.out.println(s2+"==");