Как я могу вернуться к началу строки и перезаписать то, что уже было выведено на консоли? Не работает следующее:
System.out.print(mystuff+'\r');
Как я могу вернуться к началу строки и перезаписать то, что уже было выведено на консоли? Не работает следующее:
System.out.print(mystuff+'\r');
Я подозреваю, что ваш курсор перемещается к передней части линии. Текст, который у вас уже есть, не исчезает, потому что вы ничего не перезаписывали. Вы можете выводить пробелы, чтобы очистить строку, а затем добавить еще один файл \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-секундную задержку, а затем "старая строка" изменяется на "новую строку"
Я намеренно сделал первую строку длиннее второй, чтобы продемонстрировать, что если вы хотите удалить всю строку, вам придется перезаписать конец пробелами.
Также обратите внимание, что escape-последовательность "\ b" будет содержать 1 пробел, а не начало строки. Поэтому, если вы только хотели стереть последние 2 символа, вы можете написать:
System.out.println("foo\b\bun")
и получите "удовольствие".
Мое предположение (и это предположение) будет заключаться в том, что "\ r" действительно работает, но используемая консоль не относится к нему так, как вы ожидали. Какую консоль вы используете? Если это что-то вроде вывода консоли в вашей среде IDE, вы попробовали его в реальной командной строке?
Если вы просто хотите написать новую строку на консоли, вы должны использовать метод println():
System.out.println(mystuff);
Однако это не приведет к удалению того, что уже есть в строке. На самом деле, поскольку System.out - это PrintStream, который является типом OutputStream, в основном это трудно сделать, хотя вы можете найти способы его использования в терминах.
Возможно, вам повезло с использованием Java-реализации библиотеки curses, например JavaCurses.