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

为什么\0在java的不同系统中打印不同的输出,java,netbeans,Java,Netbeans,下面的代码在不同的系统中打印不同的输出 String s = "hello?vsrd".replace('?', '\0'); System.out.println(s); 当我在我的系统(Linux Ubuntu、Netbeans 7.1)中尝试时,它打印: 当我在另一个系统(LinuxMint,NetBeans7.1)中尝试相同的代码时,它打印为 我知道\0在java中充当字符(显然s.length()打印10)。并且,不可打印的字符可以这样打印(框)。但是,为什么这只在某些系统上起作

下面的代码在不同的系统中打印不同的输出

String s = "hello?vsrd".replace('?', '\0');
System.out.println(s);
当我在我的系统(Linux Ubuntu、Netbeans 7.1)中尝试时,它打印:

当我在另一个系统(LinuxMint,NetBeans7.1)中尝试相同的代码时,它打印为

我知道
\0
在java中充当字符(显然s.length()打印10)。并且,不可打印的字符可以这样打印(框)。但是,为什么这只在某些系统上起作用?这是jdk版本还是OSs的区别?我不想要替代代码,但想知道为什么会发生这种情况。
你可以考虑<代码>字符串s=“hello \0vSRD”;

\0
是不可打印的字符

此外,在
C
中,字符串通常以
\0
结尾,因为它们不显式存储长度。某些程序在达到该字符时将停止打印


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

我知道这不是直接的答案。但可能会更有帮助。
您真的需要
'\0'

也许您可以使用
replaceAll()


这两个输出都是从Netbeans中的输出窗口打印的吗?还是只有第二个?语言环境设置相同?在两个系统上打印什么?@Rick Grashel,在netbeans上都尝试过,请参阅更新。netbeans中的输出窗口实际上只呈现从命令行发送和接收的内容,因为它在后台执行Ant。假设两台机器上的Java版本相同,Mint(Ubuntu的一个经过高度调整的版本)很可能正在使用一个不同的字符集,该字符集为空字符定义了一个“框”。我知道这是另一种方法。我只是想知道为什么会这样。我希望@Vlad的答案是正确的。
String s="hello?vsrd".replaceAll("?", "");