Как я могу вернуться к началу строки в консоли? - PullRequest
27 голосов
/ 19 ноября 2008

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

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

Ответы [ 3 ]

37 голосов
/ 19 ноября 2008

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

и получайте «удовольствие».

7 голосов
/ 19 ноября 2008

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

3 голосов
/ 19 ноября 2008

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

System.out.println(mystuff);

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...