为什么\ 0在java中的不同系统中输出不同的输出
问题描述:
下面的代码在不同的系统中输出不同的输出。为什么 0在java中的不同系统中输出不同的输出
String s = "hello?vsrd".replace('?', '\0');
System.out.println(s);
当我在我的系统(Linux操作系统Ubuntu,Netbeans的7.1)试过,印刷:
当我在另一系统(Linux Mint的,Netbeans的尝试相同的代码7.1)它打印为
我明白\0
充当java中的字符(by referring this answer,明显是s.length()打印)。而且,不可打印的字符可以像这样打印(方框)。但是,为什么这只适用于某些系统呢?这是jdk版本还是操作系统的差异?我不想要另外的代码,但想知道为什么会发生这种情况。 你可以考虑String s = "hello\0vsrd";
。
答
\0
是不可打印的字符。
另外,在C
中,字符串通常以\0
结尾,因为它们没有明确地存储它们的长度。有些程序只会在到达该字符时停止打印。
Netbeans控制台确实打印它,但字体可能没有字形,甚至没有正方形,这可能会解释不同的行为。
答
我知道这不是直接的答案。但也许可以更有帮助。
你真的需要'\0'
?你可以使用replaceAll()
。
String s="hello?vsrd".replaceAll("?", "");
+0
我知道那些是替代方法。我只是想知道为什么会这样。我希望@弗拉德答案是正确的。 – Visruth 2013-02-19 14:19:57
这两个输出是从Netbeans的输出窗口打印出来的吗?还是只有第二个? – mightyrick 2013-02-19 13:54:13
区域设置是否相同? – 2013-02-19 13:54:23
在两个系统上都打印了什么'Charset.defaultCharset()? – 2013-02-19 13:55:21