Java 如何在控制台中返回到行的开头?

Java 如何在控制台中返回到行的开头?,java,console,Java,Console,如何返回到行首并覆盖控制台上已输出的内容?以下各项似乎不起作用: System.out.print(mystuff+'\r'); 如果只想向控制台写入新行,则应使用println()方法: 但是,这不会删除行中已有的内容。实际上,由于System.out是一个PrintStream,它是OutputStream的一种类型,这基本上很难做到,尽管您可能会找到特定于终端的方法来做到这一点 使用curses库的Java实现可能会更幸运,例如。我的猜测(这是一个猜测)是“\r”确实有效,但您使用的控制

如何返回到行首并覆盖控制台上已输出的内容?以下各项似乎不起作用:

System.out.print(mystuff+'\r');

如果只想向控制台写入新行,则应使用println()方法:

但是,这不会删除行中已有的内容。实际上,由于System.out是一个PrintStream,它是OutputStream的一种类型,这基本上很难做到,尽管您可能会找到特定于终端的方法来做到这一点


使用curses库的Java实现可能会更幸运,例如。

我的猜测(这是一个猜测)是“\r”确实有效,但您使用的控制台并没有像您预期的那样处理它。您使用的是哪个控制台?如果它类似于IDE中的控制台输出,您是否在真正的命令行上尝试过它?

我怀疑您的光标移动到了行的前面。您已有的文本不会消失,因为您没有用任何内容覆盖它。您可以输出空格以清空该行,然后添加另一行\r\n

我刚刚在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")

并获取“乐趣”。

main()应捕获异常!:DIn实码,是的。三行测试行为,不值得我花时间。:)但是在一个实际的应用程序中,如果3秒的延迟太多,那么最短但适当的时间应该是多少?@frewper在一个实际的应用程序中,你根本不需要延迟:)在本文撰写时,有一个将近9年的bug指出了Eclipse上的这个确切问题:15年(crystal)周年纪念-但4.14版本的修复可能即将到来!
System.out.println("foo\b\bun")