收到输入后重新打印行

问题描述:

如何在从用户(从终端)接收输入后重新打印一行?收到输入后重新打印行

我知道,你可以使用转载行:

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

那么,你不再是那条线,所以'\ r'不会让你到任何地方。 – shmosel

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

熟食模式对于简单的命令行程序输入更为常见,基本意思是“给我用户的输入,一次一行”。 “一次一行”通常意味着“当用户按下输入时”。大多数“煮熟”的实现回应键盘输入到控制台。

由于许多原因,在CLI程序中执行“原始”模式很困难 - 这不是不可能,但很困难。我将不遗余力在这个场地的细节(这是很多,不借给自己容易复制和粘贴在这里),而是指向你我尝试同样的,当几年前使用的资源:

Non blocking console input in Python and Java

快速hunteke总结:终端/控制台需要改变状态,不仅仅是你的程序,也没有可移植的方法。你将外包给其他图书馆或程序来做你想做的事 - 只要不要忘记在你的程序退出时撤消它,否则你的用户不会感到高兴!