trim().length() == 0 是最简且安全的非空判断方式,但需先判 null;== "" 无法识别含空白字符的“视觉空字符串”,且 null 时会抛 NullPointerException。

String.trim() 为什么不能直接用 == "" 判断空字符串
因为用户输入可能包含空格、制表符、换行符等空白字符,"" 只匹配严格空字符串,而 "
" 这类“视觉上为空”的字符串调用 length() 会返回非零值,直接比较会误判为“有内容”。
必须先用 trim() 去除首尾空白,再判断长度是否为 0。
正确写法:trim().length() == 0 是最简且安全的判断方式
这是 Java 和 JavaScript 中通用、高效、无副作用的校验逻辑。不需要额外引入正则或工具类。
-
trim()不改变原字符串,只返回新字符串,适合链式调用 -
length()是 O(1) 操作,性能无顾虑 - 对 null 值会抛
NullPointerException,所以必须先判 null(见下一点)
必须处理 null 场景,否则运行时崩溃
表单字段未赋值、后端未传参、JSON 解析失败等情况都可能导致字符串为 null。此时调用 trim() 会直接触发 NullPointerException。
推荐写法(Java):
if (input == null || input.trim().length() == 0) {
// 输入为空或仅含空白
}
JavaScript 可用可选链 + 空值合并(ES2020+):
if ((input?.trim()?.length ?? 0) === 0) {
// 输入为空、null、undefined 或仅含空白
}
别用正则 / StringUtils.isBlank() 替代,除非真有特殊需求
有人用 input == null || input.matches("^\s*$") 或 Apache Commons 的 StringUtils.isBlank(),但没必要:
-
matches()底层编译正则,开销比trim().length()高得多 -
StringUtils.isBlank()多一层依赖,且行为和trim().length() == 0完全一致 - 某些旧版 Android(API trim() 不处理 Unicode 空白(如 ),但普通 Web/Java 后端几乎不遇此问题
真正要注意的是:如果业务要求“不允许纯空格”,那 trim().length() == 0 就是唯一该用的逻辑;若还要过滤中间空格或特殊符号,那就不是空校验,而是格式校验了。

















