我正在使用此代码输出文本,并让用户按输入以显示下一行对话框。但是,按 Enter 会显示两行文字。这是为什么?
public void pressEnterToContinue() {
try {
System.in.read();
} catch(Exception e) { }
}
作为参考,该方法如下所示:
pressEnterToContinue();
System.out.println("This is a line of text.");
pressEnterToContinue();
System.out.println("So is this.");
pressEnterToContinue();
System.out.println("And this.");
//etc.
第一行单独显示“这是一行文字”。该方法一直等到用户按下回车键,然后它显示接下来的两行(“这是这个。”和“和这个。”),它应该只显示一行。
我确实尝试过短暂延迟,但这并未解决问题。
答案 0 :(得分:2)
按回车键回显为新行。 println引入了另一条线。当您在控制台上键入时,O.S。回显每个字符,因此,您的输入会被回显,然后您的代码会再次在屏幕上打印出来。之所以如此,是因为你正在处理一个shell,它本身就是一个程序,它可以拾取你的击键并回复它们。
可以编写一个shell,它不回显用户输入,但对于易犯错误的人类来说是不切实际的。您可能想要在各自的端口上尝试telneting到smtp服务器或http服务器,并键入相应的命令来发送邮件或获取html页面。那里没有回音。这感觉很奇怪。
答案 1 :(得分:0)
System.in.read()
读取一个字节。我的猜测是你在一个平台上运行你的代码,其中换行符由两个字节的CR LF序列表示,因此按Enter键可以满足CR的第一个System.in.read()
调用,第二个System.in.read(
)用LF打电话。更改您的代码以使用System.console().readline()
应该解决此问题,但请查看discussion and other approaches described here和solutions discussed here。
这里有关于如何在各种平台上展示换行信息的链接。