stringutils.isblank(str) 是首选方法,用于统一校验 null、"" 和纯空白字符串;isnotblank() 为其反面,适用于业务参数校验;defaultifblank() 对 null 和空白均生效,语义更明确;避免误用 isempty()(不忽略空白)和 equals()(区分大小写)。

Java 中用 Apache Commons Lang 的 StringUtils 做空值和空白字符串校验,核心是避免 NullPointerException,同时统一处理 null、空字符串 ""、纯空白(如 "\t\n ")这三类边界情况。
判断是否为空或空白(最常用)
StringUtils.isBlank(str) 是首选方法:它返回 true 当且仅当字符串为 null、长度为 0,或只包含空白字符(Character.isWhitespace() 判定的,包括空格、制表符、换行等)。
- 比
str == null || str.trim().length() == 0更安全——不会因null调用trim()报错 - 比
str == null || str.equals("")更严格——能识别"\n\t "这类“看似有内容实则无意义”的字符串 - 示例:
StringUtils.isBlank(null) → true,StringUtils.isBlank(" ") → true,StringUtils.isBlank("a") → false
判断是否非空且非空白(业务校验主力)
StringUtils.isNotBlank(str) 是 isBlank() 的逻辑反面,日常参数校验、表单提交、配置读取中高频使用。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 推荐用于 if 判断入口参数:
if (StringUtils.isNotBlank(userName)) { ... } - 配合 Optional 或断言库(如 AssertJ)更清晰:
assertThat(userName).isNotBlank(); - 注意:它不校验内容合法性(比如是否含非法字符),只管“有没有有效文本”
安全获取默认值(避免 null 传播)
用 StringUtils.defaultString(str, defaultStr) 或 StringUtils.defaultIfBlank(str, defaultStr) 替代三元表达式。
-
defaultString(null, "N/A") → "N/A";defaultString("", "N/A") → ""(仅对null生效) -
defaultIfBlank(null, "N/A") → "N/A";defaultIfBlank(" ", "N/A") → "N/A"(对null和空白都生效) - 比
str != null ? str : "N/A"或Objects.toString(str, "N/A")更贴近语义——明确表达“空白即缺省”意图
小心 isEmpty 和 equals 的陷阱
StringUtils.isEmpty(str) 只判 null 或长度为 0,**不忽略空白**。例如 StringUtils.isEmpty(" ") 返回 false。
- 除非你明确需要区分
""和" ",否则别用isEmpty做通用校验 -
StringUtils.equals(a, b)安全比较两个可能为null的字符串,内部做了null检查,比a.equals(b)或Objects.equals(a, b)在旧 JDK 中更轻量 - 但注意:
StringUtils.equals("a", "A")返回false(区分大小写),如需忽略大小写用equalsIgnoreCase
引入依赖后直接静态调用即可,无需实例化。关键是根据语义选对方法:要“真正有意义的内容”,就用 isNotBlank;要兜底默认值,优先考虑 defaultIfBlank;所有涉及 null 字符串的比较或转换,都让 StringUtils 扛住。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










