2010-07-25 65 views
11

我只是測試退格逃生如下:Java的退格逃脫

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

我希望得到的輸出:地獄
但它是:「你好」與方塊

有誰知道如何java處理這個?

回答

18

Java不會「處理」它的角色。它所知道的只是一個字節流,操作系統表示它可以寫入字節,並且會很高興地將字節寫入其中,包括一個ASCII退格。

什麼發生當流接收到的字符與Java沒有任何關係時,它完全依賴於終端。有些終端會刪除前一個字符,有些終端會將退格字符顯示爲一些奇怪的字形,甚至是一個特殊的「退格字符」字形。有些人可能會完全放棄角色,如果他們無法解釋它的話,其他人(實際上大多數終端模擬器)的行爲將取決於他們的配置方式。但是,所有這些與Java無關,無論它們是由Java還是Perl寫的,或者是C++ cout或其他任何東西,它們都會以這種方式行事。

2

它應該在Windows命令控制檯中工作得很好。這個bug可以識別爲一個Eclipse bug:bug 76936。另請參閱How to get backspace \b to work in Eclipse’s console?

+0

感謝,但它仍然沒有在Windows控制檯正常工作。你在機器上試過了嗎?也許這是我的系統問題。 – Alfred 2010-07-25 21:31:18

+0

我在Windows控制檯(回車沒有換行符)中使用了\ r,它工作正常。我用它來顯示「處理NN%」chaging文本。 – helios 2011-06-08 11:39:21

-4

你用System.out.println( 「... 」),這是本質上是System.out.print(「 ... \ n」)

不要使用.println,你只是刪除換行...

+1

在這種情況下,println(「Hello \ b」)會發出「Hello \ b \ n」而不是「Hello \ n \ b」。這並不能解釋字形。 – helios 2011-06-08 11:40:49

5

要得到您想要的輸出即Hell您需要在\b後添加一個space字符。因爲\b只會將光標(虛擬)向後移動到1個位置,但不會將其刪除。你只能通過space替換要刪除的字符。因此,嘗試下面的行獲得Hell作爲輸出:

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

PS:該解決方案適用於Windows操作系統和Ubuntu操作系統。對於其他操作系統,它的行爲可能與上面@Kilian Foth所解釋的不同。

+2

這爲我打印Hello▯(+空格)... – tilpner 2013-08-08 14:03:26

+1

@StackOverflowException - 您輸出的原因已經由Kilian Foth解釋。您的操作系統必須與Windows和Ubuntu不同。 – 2013-08-09 15:01:52

+0

謝謝;這對我工作(使用魚殼)。 – Arman 2013-09-19 03:47:12

-2

嘗試使用終端來執行您的類文件。

java classname 

當IDE執行\ b時,它會自動忽略它。因爲IDE中沒有相應的庫來運行\ b。但是,如果你在終端中運行它,它可能會被執行。所有的終端都有這個庫。

-3

你可能想編寫一個函數來做到這一點:

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