2010-07-25 10 views
11

Ho appena provato la fuga backspace come segue:Java backspace sfuggire

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

mi aspettavo di ottenere l'output: Hell
Ma era: "Ciao" con un blocco quadrato

qualcuno sa come java gestire questo?

risposta

18

Java non "gestisce" affatto quel carattere. Tutto quello che sa è un flusso di byte su cui il sistema operativo dice che può scrivere byte, e in esso scriverà felicemente dei byte, incluso un backspace ASCII.

Cosa succede quando lo stream riceve quel carattere non ha assolutamente nulla a che fare con Java, è totalmente dipendente dal terminale. Alcuni terminali cancelleranno il carattere precedente, alcuni visualizzeranno il carattere backspace come un glifo strano o addirittura come un glifo speciale "carattere backspace". Alcuni potrebbero abbandonare del tutto il personaggio se non riescono a interpretarlo, altri (la maggior parte degli emulatori di terminale, infatti) si comporterà in modo diverso a seconda di come sono configurati. Ma tutto questo non ha nulla a che fare con Java, si comportano in questo modo sia che siano scritti da Java o Perl print o C++ cout o qualsiasi altra cosa.

2

Dovrebbe funzionare perfettamente nella console di comando di Windows. Questo bug è riconoscibile come un bug di Eclipse: bug 76936. Vedere anche How to get backspace \b to work in Eclipse’s console?

+0

grazie, ma ancora non ha funzionato nella console di Windows pure. hai provato questo sul tuo computer. forse è il mio problema di sistema. – Alfred

+0

Ho usato \ r in Windows Console (ritorno a capo senza avanzamento riga) e funziona correttamente. Lo uso per mostrare un testo di "elaborazione NN%". – helios

-4

si utilizza System.out.println ("... "), che è essenzialmente System.out.print (" ... \ n")

Non utilizzare .println, stai semplicemente rimuovendo la newline ...

+1

In tal caso println ("Hello \ b") emetterebbe "Hello \ b \ n" non "Hello \ n \ b". E questo non spiega il glifo. – helios

5

Per ottenere l'output desiderato, ad esempio Hell, è necessario aggiungere un carattere space dopo \b. Poiché \b sposta il cursore (praticamente) su 1 posizione indietro ma non lo elimina. Tutto quello che puoi fare è sostituire il personaggio da cancellare con space. Così provare la seguente riga per ottenere Hell come output:

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

PS: questa soluzione funziona su sistema operativo Windows e Ubuntu OS. Per altri sistemi operativi può comportarsi diversamente come spiegato da @Kilian Foth sopra.

+2

Questo stampa Hello▯ (+ spazio bianco) per me ... – tilpner

+1

@StackOverflowException - Il motivo del tuo output è già stato spiegato da Kilian Foth. Il tuo sistema operativo deve essere diverso da Windows e Ubuntu. –

+0

Grazie; questo ha funzionato per me (usando la conchiglia di pesce). – Arman

-2

Prova a utilizzare il terminale per eseguire il file di classe.

java classname 

Quando IDE viene eseguito \ b, lo ignorerà automaticamente. Perché non esiste una libreria corrispondente in IDE per eseguire \ b. Tuttavia, se li si esegue in un terminale, potrebbe essere eseguito. Tutti i terminali hanno quella libreria.

-3

si potrebbe desiderare di scrivere una funzione per farlo:

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