我正在使用Scanner类通过控制台从用户那里获取一些输入。每当用户在屏幕上输入内容并按下输入时,输入就会停留在屏幕上,例如:
这是提示 //用户写命令并按下
//使用writes命令3
无论如何,我可以让输入的命令在按下回车后不留在控制台中吗?
例如:
//用户写命令
答案 0 :(得分:5)
简短回答:不,不是直接来自Java。 Java对控制台的控制非常有限:您只能读取和写入它。控制台上显示的内容无法以编程方式删除。
答案很长:在Java中,所有控制台操作都是通过输入和输出流处理的 - System.in
是输入流,System.out
和System.err
是输出流。正如你自己看到的那样,there is no way to modify an output stream在Java中 - 本质上,所有输出流实际上都是输出字节到某个目的地(这就是为什么它被称为“流” - 单向的一个原因)。* < / p>
我能看到的唯一解决方法是使用Console
对象(来自System.console()
)。具体来说,readPassword()
方法不会回显用户键入的任何内容。但是,这种方法存在三个问题。首先,Console
类仅在Java 1.6中可用。其次,我不建议将此用于除密码以外的输入,因为它会使输入命令比预期更麻烦。第三,它仍然不会从屏幕上删除提示,这会破坏你想要实现的目标,我想。
* - 从技术上讲,System.out
和System.err
都是PrintStream
的实例,但PrintStream
几乎只是OutputStream
的灵活版本 - a PrintStream
仍然像普通输出流一样,输出是单向操作。
答案 1 :(得分:1)
您将很难使用标准库执行此操作。
如果您不想do it yourself,则可以使用JLine等第三方库来执行此操作。
答案 2 :(得分:0)
呵呵 - 我总是假设你把退格字符('\ b')发送到sysout它会清除 - 但我从来没有尝试过(这些天不做很多控制台编程)。
没试过,但是this thread的底部似乎表明它应该有效。
请注意,这可能不适用于IDE控制台,但可以在常规操作系统控制台中使用...
我会离开,实际证明它可以作为OP的练习: - )