You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:10