当前位置: 首页 > 知识库问答 >
问题:

如何检查扫描仪下一个(System.in)超时,如果没有键入任何内容?

曾嘉祯
2023-03-14
Scanner sc = new Scanner(System.in);

扫描仪可用于读取文本文件、用户输入流等。我专门使用它来读取用户输入,如上文所述。

用我上面做的扫描仪,因为它“骑”System.in,当没有下一个输入时,调用它的hasNext()将导致相关线程阻塞,直到它有下一个数据,当它有数据时返回true。我想检查,getter样式,下一个有数据的天气,而不是像hasNext()返回,下一个有数据的天气。

其他问题通过启动一个线程等待hasNext()来解决这个问题,这解决了询问者的问题。这对我的问题没有帮助。

一个有用的代码块是调用具有Next()的代码块,如果它在10ms内没有得到答案,则返回false。

我已经阅读了规则并试图遵守它们,但这是我的第一个问题,如果我做得不对,请大声说出来。

提前谢谢。

共有1个答案

仲孙雅达
2023-03-14

我认为这里有一个生产者-消费者没有错:

// Shared queue
final Queue<String> messages = new ConcurrentLinkedQueue<>();

// Non-blocking consumer
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable(){
    @Override
    public void run() {
        // non-blocking
        while((String message = messages.poll()) != null) {
            // do something
        }
    }
}, 0, 10, TimeUnit.MILLISECONDS);

// Blocking producer
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
    messages.add(sc.next());
}

然后,使用者可以在共享的队列上执行非阻塞操作。只有生产者知道,一旦阅读新消息,它就会被填充。

 类似资料:
  • 问题内容: 扫描仪可用于读取文本文件,用户输入流等。正如上面明确指出的,我专门使用它来读取用户输入。 使用上面我做的Scanner,因为它“骑乘”了System.in,所以在没有下一个输入时对其hasNext()的调用将导致相关线程被阻塞,直到下一个有数据为止,然后再返回true。我想检查一下,getter风格,下一个有数据,而不是像hasNext()返回那样,下一个有数据。 其他问题通过启动一个

  • 在分离标记之前,我试图检查扫描仪是否有多个标记。我目前正在尝试使用扫描仪。hasNext()(我的扫描仪的名字是sc)。如果用户输入“string int”,那么我不想打印“enter age”或“enter grade” 目前,无论输入是什么,我的程序都会跳过if语句。如果我把它拿走!然后,即使输入是一行,这些行也会打印出来。他们似乎也打印后,下一个是我发现奇怪的。我将非常感谢您的帮助!

  • 我正在尝试编写一个扫描器,以便每次\n被检测到,它会扫描那之后的行,直到一个新的\n出现。我第一次试过这样的东西。 它起作用,输出为 然而,当我尝试用扫描器(System.in)做同样的事情时,即使输入相同,它也不能以同样的方式工作 输出: 编辑:如果输入为 并立即输入提示符,那么Scanner.nextLine()是否就足够了?

  • 问题内容: 我搜索了类似的问题,但没有一个帮助。 考虑一个文件: 你好你好吗? 当时你在哪里? 我想在每行结束后进行一些操作。如果我使用它,则不会告诉我何时到达第一行的末尾。 我也看到了,但是它只会告诉我是否存在另一行。 问题答案: 考虑使用多个扫描仪,一个扫描仪获取每一行,另一扫描仪扫描每行。我唯一要说明的是,使用完内部扫描仪后,请务必确保将其关闭。实际上,使用完 所有 扫描仪后,您将需要关闭它

  • 我想读取一个文本文件,并将每一行放入一个字符串(字符串数组)。然而,这需要扫描文件两次,一次是为了找出有多少行,另一次是为了创建一个这样大小的字符串数组。但它抛出了一个错误,重置方法似乎不起作用。 这是相关的代码片段。

  • e、 (g) 此扫描仪工作不正常。但在删除close()后,它可以正常工作。 我想原因是“ystem.in”有问题。 请给我答案。 非常感谢。 )首先在a()中调用input.nextLine(),然后在b()中调用scan.nextInt()。我有错误,如NoSuchElementExcema。