Вопрос: Вызов Java backspace


Я просто проверил escape-пространство в обратном направлении следующим образом:

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

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

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


12


источник


Ответы:


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

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


21



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

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

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


5



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


2



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

 java classname

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


-2



Возможно, вы захотите написать функцию:

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

-2



вы используете System.out.println ("..."), который по существу является System.out.print ("... \ n")

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


-4