Scanner中nextLine问题

在java中使用扫描器Scanner时,有一个很有趣的现象:

如果在nextline之前使用了next、nextInt等基本类型(companion)时,会出现不能输入的情况。

例如:

Scanner s = new Scanner(System.in);
String str = s.next();
System.out.println("空一行");
String str2 = s.nextLine();
System.out.println("再空一行");

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。
nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。
了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。

解决办法:

//方法一,增加一次数据读取,清理掉空白符
Scanner input = new Scanner(System.in);
int num = input.nextInt();
input.nextLine();
String str = input.nextLine();
//方法二,NextLine()方法放在所有其他扫描方法的前面
Scanner input = new Scanner(System.in);
String str = input.nextLine();
int num = input.nextInt();
String str_1 = input.next();
//方法三,使用Next()方法
Scanner input = new Scanner(System.in);
int num = input.nextInt();
String str = input.next();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值