Как обновить вывод консоли в java?

Мне нужно обновить консоль.

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.

Скажите, пожалуйста, какие изменения мне нужно внести, чтобы получить ожидаемый результат.

Спасибо вам всем.

Какие...? Я использовал ваши коды и получил ожидаемый результат. Что ж, и ваш текущий результат, и ваш ожидаемый результат странные ...

Jai 21.05.2018 09:35

Вы используете терминал, который не переводит '\ r' (возврат каретки) в перевод строки. Таким образом, курсор возвращается в начало строки (трижды) и перезаписывает то, что уже было там.

jr593 21.05.2018 09:49

Ой. Я использую в Intellij IDE, а также в обычной командной строке, оба показывают одинаковый вывод @ jr593

Dhanasekaran Don 21.05.2018 09:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
1 357
2

Ответы 2

Вам нужно узнать разницу между символьным литералом \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 ', поскольку он будет печатать литералы в новой строке, хотя сначала он все равно переместит курсор в начало строки. Но он будет неявно печатать символы во второй строке.

Для получения дополнительной информации см. этот вопрос

не могли бы вы объяснить мне, какие изменения нужно внести, чтобы получить результат?

Dhanasekaran Don 21.05.2018 11:04

Как сказал Анус Калим, результат зависит от системы. Обычно \r означает «Вернуть в начало строки». Таким образом, это не позволяет вам продвигаться «вверх» в выводе. Возможно, вы можете использовать другие уловки гуру, но, опять же, это будет полностью зависеть от вашей ОС.

Bruno L 22.05.2018 06:49

Чтобы увидеть разницу между \ r и \ n, вы должны запустить свой код из командной строки. Консоль Eclipse (и аналогичная для других IDE) не моделирует поведение полного терминала и переместится на следующую строку как для \ r, так и для \ n. Однако в командной строке \ r переместит курсор только в начало текущей строки.

Другие вопросы по теме