Подтвердить что ты не робот

Как я могу вернуться к началу строки в консоли?

Как я могу вернуться к началу строки и перезаписать то, что уже было выведено на консоли? Не работает следующее:

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

Ответ 1

Я подозреваю, что ваш курсор перемещается к передней части линии. Текст, который у вас уже есть, не исчезает, потому что вы ничего не перезаписывали. Вы можете выводить пробелы, чтобы очистить строку, а затем добавить еще один файл \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")

и получите "удовольствие".

Ответ 2

Мое предположение (и это предположение) будет заключаться в том, что "\ r" действительно работает, но используемая консоль не относится к нему так, как вы ожидали. Какую консоль вы используете? Если это что-то вроде вывода консоли в вашей среде IDE, вы попробовали его в реальной командной строке?

Ответ 3

Если вы просто хотите написать новую строку на консоли, вы должны использовать метод println():

System.out.println(mystuff);

Однако это не приведет к удалению того, что уже есть в строке. На самом деле, поскольку System.out - это PrintStream, который является типом OutputStream, в основном это трудно сделать, хотя вы можете найти способы его использования в терминах.

Возможно, вам повезло с использованием Java-реализации библиотеки curses, например JavaCurses.