以下代码在不同系统中打印不同的输出。
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()打印 10 )。并且,不可打印的字符可以像这样打印(框)。但是,为什么这只在某些系统上表现呢?它是jdk版本或操作系统的区别?我不想要替代代码,但想知道为什么会这样。
您可以考虑String s = "hello\0vsrd";
。
答案 0 :(得分:3)
\0
是一个不可打印的角色。
此外,在C
中,字符串传统上以\0
终止,因为它们没有明确地存储它们的长度。有些程序只有在达到该角色时才会停止打印。
Netbeans控制台会打印它,但字体可能没有字形,甚至没有正方形,这可能解释了不同的行为。
答案 1 :(得分:0)
我知道这不是直接的答案。但也许可以更有帮助。
你真的需要'\0'
吗?
也许你可以使用replaceAll()
。
String s="hello?vsrd".replaceAll("?", "");