Java中的“从键盘输入”

在初学Java的过程中,笔者发现了一个尴尬的问题,当学习了有关面向对象编程和抽象数据结构的知识、进行了一两次与之有关的实验后,竟然连如何从键盘输入内容到变量中都不清楚。C语言提供的格式化输入scanf()和各种适应不同情况的输入函数在Java中都不存在,这让我一时间摸不着头脑。在查阅相关资料后,结合计算机系统的一些知识,才有了一些新的感悟。

首先是普遍使用且广泛适用于各种情况的使用Scanner类:

Scanner sc = new Scanner(System.in)

System.in是键盘输入流,作为创建该Scanner类对象的参数传入。之后就可以使用sc进行一系列的操作了,比如sc.next()就是取出(键盘输入流的)下一个字符串。同时Scanner也提供了一系列其它的操作,包括将字符串转换成其他数据类型的方法,这就能很好的实现和C语言中scanf()格式化输入一样的功能。

我对Scanner类有一些思考。首先,这种读入输入流的形式,和C语言文件操作中的“读文件”操作非常类似,都是对一个抽象成“流”的内容进行操作。能够佐证这一点的是,如果创建了一个Scanner类对象,在使用结束后是需要将其关闭的,否则IDE会有警告。这就和C语言中文件需要打开和关闭十分类似。其次,在学习了CSAPP后,我发现文件本身也是一种抽象。而在系统层面,C语言中存在的stdin就是键盘输入流,同时也是一个文件,其文件描述符是0,在创建进程加载程序时会默认打开。这样来看,构造方法Scanner(System.in)中的参数和stdin就十分相像了。

在使用sc时,也要注意sc.next()在每次使用时(大概率)会得到一个新的输入,不能把它当作一个使用一次就不发生改变的量,而错误的使用它,比如错误的使用其作为某些边界值,会造成灾难性的后果。这和迭代器类似,it.next()操作尽量找一个Case来承接一下,sc.next()也是一样的原理。

需要注意的是,Scanner在读到空格时会自动结束,若想读空格或是充分利用文件的缓冲区(还是计算机系统中的知识),则可以使用BufferReader类,其提供带有缓存的读操作,同时支持按照行的规则读字符串。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值