Scanner工作机制——标记读取法 ,深入理解next()和nextline()的区别

此文主要介绍Scanner是如何通过标记读取法读取数据的。
为了防止出错,我们也必将掌握next和nextLine的差别
这里也涉及些文件输入输出的知识,可参考此链接:Java文件输入输出PrintWriter和Scanner小结

Scanner如何工作

1.标记读取法

标记读取法就是会读取用分隔符分隔开的标记(不能读取分隔符,只能跳过)。

  • 比如:方法nextByte()、nextShort()、nextlnt(),nextLong()、nextFloat()、nextDouble() 和next()等都称为标记读取方法。

  • 默认情况下,分隔符是空格。可以使用useDelimiter(String regex)方法设置新的分隔符模式。

标记读取法如何工作?

  1. 一个标记读取方法首先跳过任意分隔符(默认情况下是空格),然后读取一个以分隔符结束的标记。
  2. 然后,对应于nextByte()、nextShort()、 nextlnt()、nextLong()、nextFloat()和nextDouble(), 这个标记就分别被自动地转换为byte, short、int、long、float或double型的值。对于next()方法而言是无须做转换的。
  3. 如果标记和期望的类型不匹配,就会抛出一个运行异常java.util. InputMismatchException

那么我们可以发现:标记读取法是不能读取后面的分隔符

2.nextLine()

方法next()和nextLine()都会读取一个字符串。二者的区别是:

  • next()方法读取一个由分隔符分隔的字符串,且不能读取分隔符只能跳过
  • nextLine()读取一个以换行符结束的行,可以读取行分隔符,但不返回到字符串中,只是单纯吸收

说明:
我们知道标记读取方法不能读取标记后面的分隔符。 所以如果在标记读取方法之后调用 nextLine(), 该方法读取将从这个分隔符开始, 到这行的行分隔符结束的字符。 这个行分隔符也被读取, 但是它不是 nextLine()返回的字符串部分。

举例:
在这里插入图片描述
解释:因为空格没有被nextInt吸收,所以就被nextLine读进去了。

再比如:
在这里插入图片描述

3.使用 Scanner 类从一个字符串扫描数据

可以使用 Scanner 类从文件或者键盘读取数据。 也可以使用 Scanner 类从一个字符串扫 描数据。 例如, 下面代码


Scanner input = new Scanner( "13 14 ") ;
int sum = input. nextlnt() + input. nextlnt();
System. out. println( "Sum is " + sum) ;


输出结果是: The sum is 27

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值