Scanner不算详细的详解


前言

最近搞了很多笔试题,但总是在输入环节耗费很多时间。搜索学习中发现我对Scanner一无所知,遂学习整理了一些Scanner常用的方法和知识点。


一、Scanner是什么?

是一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 可以自己指定分割的方式,将输入切分,然后可以调用不同的 next 方法,获取你想得到的类型的值。

二、如何使用

构造方法如下:
在这里插入图片描述
一般使用键盘输入流传入:

Scanner sc = new Scanner(System.in);

二、常用方法及对比

1.next系列

next系列方法有很多:
在这里插入图片描述
常用的包括 next(),nextInt(),nextLine()。

(1)next()和nextInt()一系列

这一系列方法不光是在接收键盘输入的内容,而且还是在进行扫描分割。在遇到有效字符后,会将空格、Tab 键、Enter 键视为结束符,所以 next 系列不能得到带空格的字符串。这类方法会在有输入之前阻塞。

(2)nextLine()

nextLine 以 ENTER 为结束符,也就是返回的是输入回车之前的一行字符,可以包含空格等分隔符。

(3)next系列与nextLine()连用的问题

nextLine方法前面有next系列方法时,nextline会不获取输入。原因如下:
next系列方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成对应数据类型,然后把后面的字节传递下去。
传递下来的回车分隔符就被netxLine读到了,所以netxLine读到的字符串就是空字符串。

2.hasNext

问题:当不确定输入个数的时候如何停止接受输入的数据?

这个时候就要用到hasNext了。hasNext() 方法判断输入流里是否还有内容,有的话就返回 true。

在这里插入图片描述
hasNext():

  • 判断扫描器中当前扫描位置后是否还存在下一段。
  • 输出为布尔值。
  • 判断输入的缓存中是否有效字符,遇到空格结束。
  • 如果只输入空格,不会匹配,返回false。

hasNextLine():

  • 如果在此扫描器的输入中存在另一行,则返回 true
  • 以Enter为结束符,判断此行有没有输入,空白输入也会返回true。

阻塞问题:当使用输入流构造Scanner的时候,执行到hasNext()时,会先扫描缓冲区中是否有字符,有则返回true,继续扫描。直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描 。
解决办法:
1,设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入
2,用文件输入,代替输入流


总结

本文只对Scanner常见的用法做了一下简单的阐述,如有问题,多请指正。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值