为什么\ 0在java中的不同系统中输出不同的输出

问题描述:

下面的代码在不同的系统中输出不同的输出。为什么 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

\0是不可打印的字符。

另外,在C中,字符串通常以\0结尾,因为它们没有明确地存储它们的长度。有些程序只会在到达该字符时停止打印。

Netbeans控制台确实打印它,但字体可能没有字形,甚至没有正方形,这可能会解释不同的行为。

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

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

我知道那些是替代方法。我只是想知道为什么会这样。我希望@弗拉德答案是正确的。 – Visruth 2013-02-19 14:19:57