详解Scanner类中next()和nextLine()的区别
Scanner类中的next()和nextLine()方法是我们经常使用的键盘录入方法,那么两者之间有何不同呢?
next():从控制台获取字符串,如果字符串中包含空格,只会获取空格前前的字符串,并且系统会在字符串后面自动添加\r\n。
nextLine():从控制台获取字符串,字符串中可以包含空格,以回车符作为接收结束标志。
那么两者之间有何具体不同呢?下面让我们来看一下具体的使用代码:
1. 单使用next():
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String a = sc.next();
System.out.println("请输入第二个字符串:");
String b = sc.next();
System.out.println("打印:");
System.out.println("第一个字符串:"+a);
System.out.println("第二个字符串:"+b);
sc.close();
/* output
* 请输入第一个字符串:
* 学生学习
* 请输入第二个字符串:
* 学生 学习
* 打印:
* 第一个字符串:学生学习
* 第二个字符串:学生
*/
可以看到,next()在遇到空格会结束。
2. 单使用nextLine():
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String a = sc.nextLine();
System.out.println("请输入第二个字符串:");
String b = sc.nextLine();
System.out.println("打印:");
System.out.println("第一个字符串:"+a);
System.out.println("第二个字符串:"+b);
sc.close();
/* output
* 请输入第一个字符串:
* 学生学习
* 请输入第二个字符串:
* 学生 学习
* 打印:
* 第一个字符串:学生学习
* 第二个字符串:学生 学习
*/
可以看到,nextLine()可以识别空格,并只会在遇到回车键结束。
3. 混合使用next()和nextLine(),先使用nextLine()
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String a = sc.nextLine();
System.out.println("请输入第二个字符串:");
String b = sc.next();
System.out.println("打印:");
System.out.println("第一个字符串:"+a);
System.out.println("第二个字符串:"+b);
sc.close();
/* output
* 请输入第一个字符串:
* 学生 学习
* 请输入第二个字符串:
* 学生学习
* 打印:
* 第一个字符串:学生 学习
* 第二个字符串:学生学习
*/
可以看出,输出信息和我们预想的没有差别,这种使用方法正确。
4. 混合使用next()和nextLine(),先使用next()
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String a = sc.next();
System.out.println("请输入第二个字符串:");
String b = sc.nextLine();
System.out.println("打印:");
System.out.println("第一个字符串:"+a);
System.out.println("第二个字符串:"+b);
sc.close();
/* output
* 请输入第一个字符串:
* 学生学习
* 请输入第二个字符串:
* 打印:
* 第一个字符串:学生 学习
* 第二个字符串:
*/
哎,这就出现问题了,在我们输入完第一个字符串按下回车时直接没有输入第二个字符串,直接输出了信息,并且第二个字符串在控制台显示为空,这是为什么呢?
来,让我们看一下API文档:
通过查看API文档可以看到next()方法读取到空白符(空格,tab,和回车)就结束而nextLine()只会读取到回车结束也就是“\r”;出现这个问题就是因为next()读取到空白符前的数据时结束了,然后把回车“\r”留给了nextLine();所以上面nextLine()没有输出,但不输出不代表没数据,是接到了空(回车“/r”)的数据。