如何返回行的开头并覆盖控制台上已输出的内容?以下似乎不起作用:
System.out.print(mystuff+'\r');
答案 0 :(得分:37)
我怀疑你的光标正在移动到行的前面。你已经拥有的文字并没有消失,因为你没有用任何东西覆盖它。您可以输出空格以使该行空白,然后添加另一个\ r。
我刚刚在Windows XP和AIX上测试了以下内容,它按预期工作:
public class Foo {
public static void main(String[] args) throws Exception {
System.out.print("old line");
Thread.sleep(3000);
System.out.print("\rnew");
}
}
我打印“旧线”,延迟3秒,然后“旧线”变为“新线”
我故意使第一行比第二行更长,以证明如果你想要删除整行,你必须用空格覆盖末尾。
另请注意,“\ b”转义序列将备份1个空格,而不是行的开头。所以如果你只想删除最后2个字符,你可以写:
System.out.println("foo\b\bun")
并获得“乐趣”。
答案 1 :(得分:7)
我的猜测(这是一个猜测)将是'\ r'确实有效,但你正在使用的控制台并不像你期望的那样对待它。您使用的是哪个控制台?如果它类似于IDE中的控制台输出,那么您是否在真正的命令行上尝试过它?
答案 2 :(得分:3)
如果你只想在控制台上写一个新行,你应该使用println()方法:
System.out.println(mystuff);
但是,这不会删除已在线上的内容。实际上,由于System.out是一个PrintStream,它是一种OutputStream,基本上很难做到,尽管你可能会发现特定于终端的方法。
使用curses库的Java实现(例如JavaCurses)可能会更好。