Java字符串替换和NUL(NULL,ASCII 0)字符?
测试其他人的代码后,我注意到一些JSP页面打印了时髦的非ASCII字符。深入了解源代码,我发现了这个花絮:
// remove any periods from first name e.g. Mr. John --> Mr JohnfirstName = firstName.trim().replace('.','\0');
在Java中用null字符替换String中的字符是否还能工作?我知道这'\0'
将终止C字符串。这是时髦人物的罪魁祸首吗?
回答:
在Java中用null字符替换String中的字符是否还能工作?我知道’\ 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指定。
它 DOES NOT 如果你希望用空字符替换字符会以某种方式删除的字符串的字符工作。当然,它不是那样工作的。空字符仍然是字符!
String s = Character.toString('\0');System.out.println(s.length()); // "1"
assert s.charAt(0) == 0;
它还 DOES NOT
如果你希望空字符终止字符串工作。从上面的代码片段可以明显看出,但是JLS(10.9。字符数组不是String)中也明确指定了它:
在Java编程语言中,与C不同,of的数组
char
不是aString
,并且aString
或of的数组都不char
以“ \u0000”(NUL字符)终止。
这是时髦人物的罪魁祸首吗?
现在,我们谈论的是完全不同的事情,即字符串如何在屏幕上呈现。事实是,甚至是“ Hello world!”
如果您使用dingbats字体,它将看起来很时髦。unicode字符串在一种语言环境中看起来可能很时髦,而在另一种语言环境中却看起来很时髦。即使是正确渲染的包含汉字的unicode字符串,对于格陵兰岛的人来说仍然看起来很时髦。
也就是说,无论如何,空字符都可能看起来很时髦。通常它不是您要显示的字符。就是说,由于空字符不是字符串终止符,因此Java能够以一种或另一种方式处理它。
现在要解决我们假定的预期效果,即从字符串中删除所有句点,最简单的解决方案是使用replace(CharSequence,
CharSequence)重载。
System.out.println("A.E.I.O.U".replace(".", "")); // AEIOU
replaceAll
这里也提到了该解决方案,但是该解决方案可与正则表达式一起使用,这就是为什么您需要转义点元字符的原因,并且可能会更慢。
以上是 Java字符串替换和NUL(NULL,ASCII 0)字符? 的全部内容, 来源链接: utcz.com/qa/427532.html