2010-07-25 16 views
11

solo he probado el escape de retroceso de la siguiente manera:retroceso de Java escapar

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

que esperaba para obtener la salida: Hell
Pero era: "Hola" con un bloque cuadrado

alguien sabe cómo java manejar esto?

Respuesta

18

Java no 'maneja' ese carácter en absoluto. Todo lo que sabe es un flujo de bytes en el que el sistema operativo dice que puede escribir bytes, y escribirá bytes con mucho gusto, incluido un espacio en blanco ASCII.

Lo que ocurre cuando la transmisión recibe ese carácter no tiene nada que ver con Java, es totalmente dependiente del terminal. Algunos terminales borrarán el carácter anterior, algunos mostrarán el carácter de retroceso como un glifo extraño o incluso como un glifo especial de "carácter de retroceso". Algunos pueden descartar el personaje si no pueden interpretarlo, otros (la mayoría de los emuladores de terminal, de hecho) se comportarán de manera diferente dependiendo de cómo estén configurados. Pero todo esto no tiene nada que ver con Java, se comportarán de esa manera ya sea que estén escritos por Java o Perl print o C++ cout o lo que sea.

2

Debería funcionar perfectamente bien en la consola de comandos de Windows. Este error es reconocible como un error de Eclipse: bug 76936. También vea How to get backspace \b to work in Eclipse’s console?

+0

gracias, pero aún no funcionaba en la consola de Windows también. ¿Has probado esto en tu máquina? tal vez es mi problema de sistema. – Alfred

+0

Lo he usado en Windows Console (retorno de carro sin avance de línea) y funciona bien. Lo uso para mostrar un texto de procesamiento "NN% de procesamiento". – helios

-4

está utilizando System.out.println ("... ") que es esencialmente System.out.print (" ... \ n")

No utilice .println, simplemente está eliminando la nueva línea ...

+1

En ese caso println ("Hello \ b") emitiría "Hello \ b \ n" no "Hello \ n \ b". Y eso no explica el glifo. – helios

5

Para obtener la salida deseada, es decir, Hell, debe agregar un carácter space después de \b. Debido a que \b solo moverá el cursor (virtualmente) a 1 posición hacia atrás, pero no lo eliminará. Todo lo que puede hacer es reemplazar el carácter que se eliminará por space. Por lo tanto tratar la siguiente línea para obtener Hell como salida:

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

PS: Esta solución funciona en el sistema operativo Windows y Ubuntu OS. Para otros sistemas operativos puede comportarse de manera diferente, como se explica por @Kilian Foth arriba.

+2

Esto imprime Hello▯ (+ espacio en blanco) para mí ... – tilpner

+1

@StackOverflowException: Kilian Foth ya ha explicado el motivo de su salida. Su sistema operativo debe ser diferente de Windows y Ubuntu. –

+0

Gracias; esto funcionó para mí (usando caparazón de pescado). – Arman

-2

Intenta usar el terminal para ejecutar tu archivo de clase.

java classname 

Cuando IDE execute \ b, lo ignorará automáticamente. Porque no hay una biblioteca correspondiente en IDE para ejecutar \ b. Sin embargo, si los ejecuta en la terminal, podría ejecutarse. Todos los terminales tienen esa biblioteca.

-3

Es posible que desee escribir una función para hacerlo:

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