【问题标题】:How can I erase all the characters from the console?如何从控制台中删除所有字符?
【发布时间】:2012-05-21 15:20:40
【问题描述】:

我希望我的程序能够擦除它打印的所有文本。每次它打印一些东西时,我都会调用我的print() 方法而不是System.out.print(),但是当我调用erase() 方法时,它似乎在Windows 7 控制台中没有做任何事情。我不知道发生了什么;我单独进行了一项测试,确认\b 确实会擦除字符,但无论出于何种原因,它在erase() 中都不起作用。退格字符是相互擦除还是什么?

编辑:我进行了更多测试。看起来 \b 不会覆盖换行符。所以我想我需要一种方法来做到这一点。

public static int textLength = 0;

public static void erase() {
    for (int i = 0; i < textLength; i++) {
        System.out.print('\b');
    }
    textLength = 0;
}

public static void print(String s) {
    textLength += s.length();
    System.out.print(s);
}

【问题讨论】:

  • 如果可能的话,您应该注入实际用于打印输出的内容。为了您的擦除,您是在尝试擦除“输入”的内容,还是您基本上是在编写自己的控制台?
  • 我不是在编写自己的控制台,而是在使用 Windows 控制台。程序打印的所有内容都将其长度添加到 textLength,然后在正确的时间打印该数量的退格字符,这应该会删除所有内容。

标签: java windows console escaping character


【解决方案1】:
Runtime.getRuntime().exec("cls");

编辑: 似乎这不是您正在寻找的解决方案。使用时

System.out.print('\b');

您需要注意,这不会删除已打印的内容。相反,每个退格 将光标向后移动一个字符。然后要真正擦除那里的内容,您需要用其他文本覆盖它。

【讨论】:

  • 谢谢,但我不确定是否要完全清除控制台。另外,这是特定于操作系统的,当您使用 Java 时,这会违背目的。我会一直使用它,直到找到更好的东西。
  • 查看我的编辑。这对你有帮助吗?想想 System.out.print('\b');就像在文本编辑器中使用箭头键一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多