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")