用空字符替换字符串中的字符甚至可以用Java工作吗?我知道'\0'将终止C字符串。

这取决于你如何定义什么是有效的。它是否用替换所有出现的目标字符

'\0'

是吗?当然!

String s = "food".replace('o', '\0');

System.out.println(s.indexOf('\0')); // "1"

System.out.println(s.indexOf('d')); // "3"

System.out.println(s.length()); // "4"

System.out.println(s.hashCode() == 'f'*31*31*31 + 'd'); // "true"

我觉得一切都很好!

indexOf

可以找到它,它作为长度的一部分计数,其哈希代码计算值为0;所有内容都由jls/api指定。

如果希望用空字符替换字符,可以从字符串中删除该字符。当然不是这样的。空字符仍然是字符!

String s = Character.toString('\0');

System.out.println(s.length()); // "1"

assert s.charAt(0) == 0;

它也

如果希望空字符终止字符串,请执行此操作。从上面的片段中可以明显看出,但在JLS中也有明确的规定。(

10.9. An Array of Characters is Not a String

):

在Java编程语言中,不同于C,一个数组

char

不是

String

而且两者都不是

也没有数组

烧焦

以“u0000”(nul字符)结尾。

这会是那些古怪人物的罪魁祸首吗?

现在我们讨论的是一个完全不同的问题,即字符串在屏幕上的呈现方式。事实是,即使是“你好,世界!”如果你用丁巴字体的话会很奇怪。一个Unicode字符串在一个区域设置中可能看起来很奇怪,但在另一个区域设置中却不一定。对于格陵兰岛的人来说,即使是一个正确呈现的Unicode字符串,比如说,包含汉字,也可能看起来很奇怪。

也就是说,空字符可能会看起来很奇怪;通常它不是您想要显示的字符。也就是说,由于空字符不是字符串终止符,Java无法以某种方式处理它。

现在要解决我们假定的预期效果,即从字符串中删除所有句点,最简单的解决方案是使用

replace(CharSequence, CharSequence)

超载。

System.out.println("A.E.I.O.U".replace(".", "")); // AEIOU

这个

replaceAll

这里也提到了解决方案,但这适用于正则表达式,这就是为什么您需要转义点元字符,并且可能会变慢。