2

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

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

当我在我的系统(Linux Ubuntu,Netbeans 7.1)中尝试时,它打印:

在此处输入图像描述

当我在另一个系统( Linux Mint,Netbeans 7.1 )中尝试相同的代码时,它打印为 在此处输入图像描述

我确实明白它\0在java中充当一个字符(通过引用这个答案并且显然s.length()打印10)。并且,不可打印的字符可能会像这样打印(框)。但是,为什么这仅在某些系统上起作用?是jdk版本还是操作系统的区别?我不想要替代代码,但想知道为什么会这样。你可以考虑一下String s = "hello\0vsrd";

4

2 回答 2

3

\0是不可打印的字符。

此外,在 中C,字符串传统上以 结尾\0,因为它们没有明确存储它们的长度。某些程序在到达该字符时会简单地停止打印。

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

于 2013-02-19T14:02:14.363 回答
0

我知道这不是直接的答案。但也许会更有帮助。
你真的需要'\0'吗?

也许你可以使用replaceAll().

String s="hello?vsrd".replaceAll("?", "");
于 2013-02-19T14:16:52.387 回答