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

如何清除标准输入(术语)

万明辉
2023-03-14

如何清除Java中的标准输入(术语)?

A

wait a random amount of time
print "press enter"
read line

关键是,如果用户错误地按下了回车键,它将被读取,因此测试将是错误的。我的目标是纠正这个错误。为此,我想有一个这样的算法:

wait a random amount of time
clear stdin
print "press enter"
read line

但是我找不到一个办法。这篇文章似乎很有趣:available获取剩余字符的数量,skip将跳过它们。只在纸上工作。如果通过多次按enter键来强调应用程序,则可用方法将返回

可以从该输入流中读取(或跳过)而不阻塞的字节数的估计值

因此,有时,返回值是错误的,至少有一个回车保留在缓冲区中,错误仍然存在。

这种解决方案可能会奏效,但它依赖于平台,我不想这样。此外,从Java调用系统例程是一个非常糟糕的主意。

要继续,我想清除程序的标准输入,但我不想关闭它,也不想阻止程序等待用户输入。对我来说,这似乎是一个非常基本的问题,如果答案显而易见,我会感到羞耻!

共有1个答案

燕宜修
2023-03-14

我不知道"清除stdin"的答案。我认为这是操作系统特有的,甚至不值得尝试。

然而,为了解决您的问题,您可以使用java。util。在某个随机时间提示用户的计时器。这将在单独的线程中运行。当用户最后按enter键时,检查是否已提示他/她。

下面的代码示例将在5秒后打印“按回车键”。主线程立即阻止等待用户输入,如果回车键按得太早,它会这么说,因为布尔开关还没有打开

*注意:TimerTest是我处理的类的名称。您可以随意将其更改为任何类名

static boolean userPrompted = false;

public static void main(String[] args) throws IOException {

    // Setup a 5 second timer that prompts the user and switch the userPrompted flag to true
    // This will run in a separate thread
    Timer timer = new Timer(false);
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            System.out.println("Press enter");
            synchronized(TimerTest.class) {
                userPrompted = true;
            }
        }
    }, 5000);

    // Blocks waiting for user input
    System.out.println("Get ready.. press enter as soon as you're prompted..");
    String input = new BufferedReader(new InputStreamReader(System.in)).readLine();

    // Check if user has been prompted
    synchronized (TimerTest.class) {
        if(!userPrompted) System.out.println("You pressed enter before prompted");
        else System.out.println("You pressed enter after prompted");
    }

}
 类似资料:
  • 问题内容: 我正在构建Codeigniter应用程序,并且正在尽最大努力防止SQL注入。我正在使用Active Record方法构造所有查询。我知道Active Record会自动清除输入内容,但是我想知道到底是什么程度?它只是转义所有引号,还是做更多呢?如何防止混淆的SQL注入或其他更高级的注入? 基本上,我正在寻找有关CI如何清理数据的深入说明。有人知道吗 问题答案: 完全像这样(对于MySQ

  • 代码似乎经常从标准输入中读取一个逗留的换行符,这导致读取逻辑失败。 Q)在读取之前刷新标准输入的最佳方法是什么?

  • 问题内容: 我知道PHP通常用于web开发,那里 是 没有标准的输入,但是PHP声称是可用作通用脚本语言,如果你遵循它的古怪基于web的约定。我知道PHP可以使用和打印到(或任何您想调用的东西),这很简单,但是我想知道PHP脚本如何从(特别是使用,但是任何输入函数都可以)从中获取输入,或者这甚至可能吗? 问题答案: 可以通过创建一个文件句柄来读取,然后用来读取它,例如使用一行(或者,您已经说过,使

  • 我们已经见过好几个示例使用 stdin 了。这也应该是 logstash 里最简单和基础的插件了。 所以,在这段中,我们可以学到一些未来每个插件都会有的一些方法。 配置示例 input { stdin { add_field => {"key" => "value"} codec => "plain" tags => ["add"]

  • 回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用

  • 问题内容: 从标准输入逐行读取的Scala配方是什么?类似于等效的Java代码: 问题答案: 最直接的前瞻性的方式将只使用它的一部分。但是,这很丑陋,因为您需要检查最终的空值: 这太冗长了,您宁可使用它。 我认为将使用更漂亮的方法: