Java基础 - 单线程下Scanner类实现持续等待用户输入
2021/5/8 12:25:28
本文主要是介绍Java基础 - 单线程下Scanner类实现持续等待用户输入,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.背景
我在刷编程题的时候遇到一个需求,需要持续等待用户的输入,并且每一组输入结束后 后台就做出对应的处理。经过自己查询API发现Scanner类有一个hasNext()方法,使用hasNext()可以实现我的需求,但是我发现一个问题就是他怎么一直在等待我的输入,我怎么样才能停掉它?就看下面分析。题目链接:
https://exercise.acmcoder.com/online/online_judge_ques?ques_id=3374&konwledgeId=41
2.示例
Scanner类的hasNext()方法和Iterator接口的hasNext()方法用法差不多,都是判断指针的下一个位置是否存在数据。
看示例:
import java.util.*; public class Main { public static void main(String[] args){ Scanner input = new Scanner(System.in); while (input.hasNext()) System.out.println("你输入了:"+input.nextLine()); System.out.println("我赌它执行不到我"); } }
结果:
光标一直在闪烁,等待用户的输入。这似乎和我们理解的hasNext()方法不一样?不急,看下面分析。
3.hasNext()详解
但是Scanner类的hasNext()有一个特殊的特性:执行hasNext(),它会向后移动一次指针,判断缓冲区中的指针是否指向某一字符,是就返回true;否(不指向某一字符),这时并不返回false,而是将此方法阻塞,等待用户的输入内容然后继续扫描,就好比我吃着炫迈口香糖,一直停不下来。
先查看以下Scanner类的hasNext()方法API:
类型 | 方法 | 描述 |
---|---|---|
boolean | hasNext() | 如果此扫描器的输入中有另一个标记,则返回true |
boolean | hasNext(String pattern) | 如果下一个标记与从指定字符串构造的模式匹配,则返回true。 |
boolean | hasNext(Pattern pattern) | 如果下一个完整标记与指定模式匹配,则返回true。 |
很明显使用它的重载方法就可以实现关闭它。修改后代码:
public class Main { public static void main(String[] args){ Scanner input = new Scanner(System.in); while (!input.hasNext("&"))//输入&字符结束程序 System.out.println("你输入了:"+input.nextLine()); System.out.println("这就执行到我了"); } }
结果
这篇关于Java基础 - 单线程下Scanner类实现持续等待用户输入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南