pra*_*spa 31 java string replace nul
测试了别人的代码,我注意到一些JSP页面打印出时髦的非ASCII字符.深入了解源代码我发现了这个小窍门:
// remove any periods from first name e.g. Mr. John --> Mr John
firstName = firstName.trim().replace('.','\0');
Run Code Online (Sandbox Code Playgroud)
使用空字符替换String中的字符甚至可以在Java中工作吗?我知道'\0'会终止一个C字符串.这会是时髦人物的罪魁祸首吗?
pol*_*nts 84
使用空字符替换String中的字符甚至可以在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"
Run Code Online (Sandbox Code Playgroud)
一切似乎对我都很好!indexOf可以找到它,它作为长度的一部分,它的哈希码计算值是0; 一切都是由JLS/API指定的.
它DOES NOT如果你希望用空字符替换字符会以某种方式删除的字符串的字符工作.当然它不会那样工作.空字符仍然是一个字符!
String s = Character.toString('\0');
System.out.println(s.length()); // "1"
assert s.charAt(0) == 0;
Run Code Online (Sandbox Code Playgroud)
它还DOES NOT如果你希望空字符终止字符串工作.从上面的片段中可以看出,但它在JLS中也有明确规定(10.9.字符数组不是字符串):
在Java编程语言中,与C不同,数组
char不是aString,并且aString和charno 数组都不以'\ u0000'(NUL字符)结尾.
这会是时髦人物的罪魁祸首吗?
现在我们谈论的是一个完全不同的东西,即如何在屏幕上呈现字符串.真相是,甚至是"你好世界!" 如果你使用dingbats字体会看起来很时髦.unicode字符串在一个语言环境中可能看起来很时髦,但在另一个语言环境中则看起 即使是包含中文字符的正确渲染的unicode字符串,对于来自格陵兰岛的人来说仍然看起来很时髦.
也就是说,空字符可能看起来很时髦; 通常它不是你想要显示的角色.也就是说,由于null字符不是字符串终止符,因此Java能够以某种方式处理它.
现在要解决我们假设的预期效果,即从字符串中删除所有句点,最简单的解决方案是使用replace(CharSequence, CharSequence)重载.
System.out.println("A.E.I.O.U".replace(".", "")); // AEIOU
Run Code Online (Sandbox Code Playgroud)
该replaceAll解决方案在这里提到过,但与正则表达式,这就是为什么你需要躲避点元字符,而且很可能要慢一些工作.
应该可能改成了
firstName = firstName.trim().replaceAll("\\.", "");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104939 次 |
| 最近记录: |