接收输入后重新打印行

时间:2017-10-15 23:45:41

标签: java input printing terminal

在从用户(从终端)获取输入后,您将如何重新打印一行?

我意识到您可以使用以下方式重新打印一行:

 System.out.print("\r foo");
 System.out.print("\r bar");

哪个会产生输出:

 bar

但是一旦你收到用户的意见,这似乎不起作用。例如:

System.out.print("\r foo");
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
System.out.print("\r bar");

如果输入1作为输入,则会得到:

 foo1
 bar

一旦用户提供输入,您可以在foo(或更具体地说,foo1)的同一行重新打印吗?

1 个答案:

答案 0 :(得分:0)

这里的关键可能是“原始”与“熟”的输入模式。要做你想做的事,你需要使用“原始”模式,你可以在键入的每个角色中收集它们,并决定如何处理它,包括你是否将它回显到控制台。

熟化模式对于简单的命令行程序输入更常见,基本上意味着“一次一行给我用户的输入”。并且“一次一行”通常转换为“当用户按下输入时”。大多数“熟”的实现都会将键盘输入回显到控制台。

由于种种原因,在CLI程序中执行“原始”模式很困难 - 不是不可能,而是困难。我将在这个场地(这里有很多,不适合在这里轻松复制和粘贴)的细节,而是指向你几年前尝试相同时使用的资源:

Non blocking console input in Python and Java

快速 hunteke 摘要:终端/控制台需要更改状态,而不仅仅是程序,并且没有可移植的方法。您将外包给其他图书馆或程序以执行您想要的操作 - 只是不要忘记在程序退出时撤消它,否则您的用户将不满意!