Scanner类中next()和nextLine()的区别

详解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”)的数据。

附:循环中键盘录入数据的时候,如有混用也会导致从第二轮开始nextline()中的方法接收空(回车“/r”)的数据。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值