2013-02-19 119 views
2

下面的代碼在不同的系統中輸出不同的輸出。爲什麼 0在java中的不同系統中輸出不同的輸出

String s = "hello?vsrd".replace('?', '\0'); 
System.out.println(s); 

當我在我的系統(Linux操作系統Ubuntu,Netbeans的7.1)試過,印刷:

enter image description here

當我在另一系統(Linux Mint的,Netbeans的嘗試相同的代碼7.1)它打印爲 enter image description here

我明白\0充當java中的字符(by referring this answer,明顯是s.length()打印)。而且,不可打印的字符可以像這樣打印(方框)。但是,爲什麼這隻適用於某些系統呢?這是jdk版本還是操作系統的差異?我不想要另外的代碼,但想知道爲什麼會發生這種情況。 你可以考慮String s = "hello\0vsrd";

+3

這兩個輸出是從Netbeans的輸出窗口打印出來的嗎?還是隻有第二個? – mightyrick 2013-02-19 13:54:13

+0

區域設置是否相同? – 2013-02-19 13:54:23

+2

在兩個系統上都打印了什麼'Charset.defaultCharset()? – 2013-02-19 13:55:21

回答

3

\0是不可打印的字符。

另外,在C中,字符串通常以\0結尾,因爲它們沒有明確地存儲它們的長度。有些程序只會在到達該字符時停止打印。

Netbeans控制檯確實打印它,但字體可能沒有字形,甚至沒有正方形,這可能會解釋不同的行爲。

0

我知道這不是直接的答案。但也許可以更有幫助。
你真的需要'\0'?你可以使用replaceAll()

String s="hello?vsrd".replaceAll("?", ""); 
+0

我知道那些是替代方法。我只是想知道爲什麼會這樣。我希望@弗拉德答案是正確的。 – Visruth 2013-02-19 14:19:57

相關問題