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?
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?
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.
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?
si utilizza System.out.println ("... "), che è essenzialmente System.out.print (" ... \ n")
Non utilizzare .println, stai semplicemente rimuovendo la newline ...
In tal caso println ("Hello \ b") emetterebbe "Hello \ b \ n" non "Hello \ n \ b". E questo non spiega il glifo. – helios
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.
Questo stampa Hello▯ (+ spazio bianco) per me ... – tilpner
@StackOverflowException - Il motivo del tuo output è già stato spiegato da Kilian Foth. Il tuo sistema operativo deve essere diverso da Windows e Ubuntu. –
Grazie; questo ha funzionato per me (usando la conchiglia di pesce). – Arman
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.
si potrebbe desiderare di scrivere una funzione per farlo:
def static public String backspace (String str){
return str.substring(0,str.length-1)
}
grazie, ma ancora non ha funzionato nella console di Windows pure. hai provato questo sul tuo computer. forse è il mio problema di sistema. – Alfred
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