Подтвердить что ты не робот

Вызов Java backspace

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

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

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

Кто-нибудь знает, как java обрабатывает это?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 4

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

 java classname

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

Ответ 5

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

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

Ответ 6

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

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