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:

类型方法描述
booleanhasNext()如果此扫描器的输入中有另一个标记,则返回true
booleanhasNext(String pattern)如果下一个标记与从指定字符串构造的模式匹配,则返回true。
booleanhasNext​(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类实现持续等待用户输入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程