Мне нужно обновить консоль.
Here is an example code:
public class Tester {
public static void main(String[] args) {
System.out.print("abcd\n");
System.out.print("efgh");
System.out.print("\r\r\rijkl");
}
}
Мой вывод:
abcd
ijkl
Ожидаемый результат:
ijkl
efgh
Я тоже пробовал это:
System.out.print("abcd\n");
System.out.print("efgh\n");
System.out.print("\033[0;0H");//\033[0;0H is an escape sequence to positioning the console cursor(Referred From Internet).
System.out.print("ijkl");
Для приведенного выше кода вывод:
abcd
efgh
←[0;0Hijkl
Пока я пробую онлайн-компилятор, приведенный выше код работает нормально. глянь сюда
Но он не работает в ОС Windows и Linux.
Скажите, пожалуйста, какие изменения мне нужно внести, чтобы получить ожидаемый результат.
Спасибо вам всем.
Вы используете терминал, который не переводит '\ r' (возврат каретки) в перевод строки. Таким образом, курсор возвращается в начало строки (трижды) и перезаписывает то, что уже было там.
Ой. Я использую в Intellij IDE, а также в обычной командной строке, оба показывают одинаковый вывод @ jr593




Вам нужно узнать разницу между символьным литералом \n и \r. Это варьируется от системы к системе. Хотя оба они используются в одинаковом смысле, но работают они по-разному. \r работает как возврат каретки. Он просто возвращает курсор в начало строки. В вашем случае это точно повторяет тот же сценарий.
Когда компилятор компилирует этот фрагмент кода
System.out.print("abcd\n"); // выводит abcd на console.
System.out.print("efgh"); // выводит efgh на консоль.
System.out.print("\r\r\rijkl") // устанавливает курсор в начало строки, отменяет предыдущие символы и выводит ijkl на консоль соответственно.
Итак, если вы используете \r, попробуйте использовать `System.out.println ', поскольку он будет печатать литералы в новой строке, хотя сначала он все равно переместит курсор в начало строки. Но он будет неявно печатать символы во второй строке.
Для получения дополнительной информации см. этот вопрос
не могли бы вы объяснить мне, какие изменения нужно внести, чтобы получить результат?
Как сказал Анус Калим, результат зависит от системы. Обычно \r означает «Вернуть в начало строки». Таким образом, это не позволяет вам продвигаться «вверх» в выводе. Возможно, вы можете использовать другие уловки гуру, но, опять же, это будет полностью зависеть от вашей ОС.
Чтобы увидеть разницу между \ r и \ n, вы должны запустить свой код из командной строки. Консоль Eclipse (и аналогичная для других IDE) не моделирует поведение полного терминала и переместится на следующую строку как для \ r, так и для \ n. Однако в командной строке \ r переместит курсор только в начало текущей строки.
Какие...? Я использовал ваши коды и получил ожидаемый результат. Что ж, и ваш текущий результат, и ваш ожидаемый результат странные ...