Java backspace escape

Я только что протестировал Backspace escape следующим образом:

System.out.println("Hellob");

Я ожидал получить результат: Hell
Но это было: "Привет" с квадратным блоком

кто-нибудь знает, как java справляется с этим?

6 ответов


Java не "обрабатывает" этот символ вообще. Все, что он знает, - это поток байтов, на который ОС говорит, что может писать байты, и он с радостью запишет в него байты, включая обратное пространство ASCII.

что происходит когда поток получает этот символ не имеет ничего общего с Java, он полностью зависит от терминала. Некоторые терминалы будут стирать предыдущий символ, некоторые будут отображать символ backspace как какой-то странный глиф или даже как специальный глиф "backspace character". Некоторые могут вообще отбросить символ, если они не могут его интерпретировать, другие (большинство эмуляторов терминалов, на самом деле) будут вести себя по-разному в зависимости от того, как они настроены. Но все это не имеет ничего общего с Java, они будут вести себя таким образом, независимо от того, написаны ли они Java или Perl print или C++ cout или что-то еще.


чтобы получить желаемый результат, т. е. Hell вам нужно добавить space символ после \b. Потому что \b будет перемещать курсор (практически) в 1 Положение назад, но он не будет удалять его. Все, что вы можете сделать, это заменить символ, который будет удален space. Таким образом, попробуйте следующую строку, чтобы получить Hell как выход :

System.out.println("Hello\b ");

PS: это решение работает на ОС Windows и Ubuntu OS. Для других ОС он может вести себя по-другому, как объясняется @Kilian Foth выше.


Он должен отлично работать в командной консоли Windows. Эта ошибка распознается как ошибка Eclipse:76936 ошибка. Также смотрите как заставить backspace \b работать в консоли Eclipse?


попробуйте использовать terminal для выполнения файла класса.

 java classname

когда IDE execute \b, он автоматически игнорирует его. Потому что в IDE нет соответствующей библиотеки для запуска \b. Однако, если вы запустите их в терминале, он может быть выполнен. Эта библиотека есть во всех терминалах.


вы можете написать функцию, чтобы сделать это:

def static public String backspace (String str){
    return str.substring(0,str.length-1)
}

вы используете систему.из.метод println("..."), который по существу является системой.из.печать."(..\n")

не использовать .println, вы просто удаляете новую строку ...