Java String的length()方法返回异常值的问题求助
为什么复制的"空字符串"调用length()返回6?
嘿,这个问题我碰到过好多次了——你看到的那个""根本不是真的空字符串,里面藏了6个不可见的Unicode控制字符!这些字符肉眼完全看不到,但Java会把它们当成普通字符来计数,所以调用length()才会返回6。
怎么验证?
你可以用这段代码打印出每个隐藏字符的Unicode编码,一看就明白:
String data = ""; for (char c : data.toCharArray()) { System.out.printf("U+%04X%n", (int) c); }
运行后大概率会看到类似U+FEFF(字节顺序标记BOM)或者U+200B(零宽空格)这类非打印字符,正是它们占据了6个字符位置。
为什么手动写""就正常?
因为你手动输入的""确实没有任何字符,但复制粘贴的时候,原文本里的这些隐藏控制字符会被一起复制过来,你肉眼察觉不到而已。
解决办法
- 最简单的:直接手动重新输入
"",确保没有隐藏字符 - 如果是从外部文本复制来的,先把内容粘贴到支持显示所有字符的编辑器(比如Notepad++开启「显示所有字符」功能),删掉那些不可见的控制字符再复制
- 用代码自动过滤:如果需要处理这类外部输入,可以用正则移除所有控制字符:
data = data.replaceAll("\\p{C}", "");
内容的提问来源于stack exchange,提问作者Danish Mohammad
相关产品推荐
相关产品推荐

