Я просто проверил escape-пространство в обратном направлении следующим образом:
System.out.println("Hello\b");
Я ожидал получить результат: Hell
Но это было: "Привет" с квадратным блоком
Кто-нибудь знает, как java обрабатывает это?
Я просто проверил escape-пространство в обратном направлении следующим образом:
System.out.println("Hello\b");
Я ожидал получить результат: Hell
Но это было: "Привет" с квадратным блоком
Кто-нибудь знает, как java обрабатывает это?
Java не "обрабатывает" этот символ вообще. Все, что он знает, это поток байтов, на котором ОС говорит, что он может писать байты, и он будет счастливо записывать в него байты, включая ASCII-backspace.
Что происходит, когда поток получает этот символ, он не имеет ничего общего с Java, он полностью зависит от терминала. Некоторые терминалы стирают предыдущий символ, некоторые будут отображать символ обратного пространства как какой-то странный глиф или даже как специальный символ "backspace character". Некоторые могут вообще отказаться от персонажа, если они не могут его интерпретировать, другие (большинство эмуляторов терминала, по сути) будут вести себя по-разному в зависимости от того, как они настроены. Но все это не имеет ничего общего с Java, они будут вести себя так, независимо от того, написаны ли они Java или Perl print
или С++ cout
или что-то еще.
Чтобы получить желаемый результат i.e. Hell
, вам нужно добавить символ space
после \b
. Поскольку \b
будет перемещать курсор (фактически) на 1 позицию назад, но он не удалит его. Все, что вы можете сделать, это заменить символ, который нужно удалить, space
. Таким образом, попробуйте следующую строку, чтобы получить Hell
как вывод:
System.out.println("Hello\b ");
PS. Это решение работает на ОС Windows и Ubuntu OS. Для других ОС это может вести себя по-другому, как объяснил @Kilian Foth выше.
Он отлично работает в командной консоли Windows. Эта ошибка распознается как ошибка Eclipse: ошибка 76936. Также см. Как получить backspace\b для работы в консоли Eclipses?
Попробуйте использовать терминал для выполнения вашего файла класса.
java classname
Когда IDE выполняет \b, он автоматически игнорирует его. Поскольку в IDE нет соответствующей библиотеки для запуска \b. Однако, если вы запустите их в терминале, это может быть выполнено. Все терминалы имеют эту библиотеку.
Возможно, вы захотите написать функцию для этого:
def static public String backspace (String str){
return str.substring(0,str.length-1)
}
вы используете System.out.println( "..." ), который по существу является System.out.print( "...\n" )
Не используйте .println, вы просто удаляете новую строку...