用空字符替换字符串中的字符甚至可以用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
这里也提到了解决方案,但这适用于正则表达式,这就是为什么您需要转义点元字符,并且可能会变慢。