Apache Commons Lang库里的StringUtils类这两个方法进行区分
isNotEmpty
- 作用:检查字符串非空(即不为
null
且长度大于 0)。 - 逻辑:
- 如果字符串是
null
→ 返回 false
- 如果字符串是空字符串
""
→ 返回 false
- 其他情况(包括全空白字符的字符串,如
" "
)→ 返回 true
public static boolean isNotEmpty(String str) {
return !isEmpty(str); // isEmpty 检查 str == null || str.length() == 0
}
isNotBlank
- 作用:检查字符串非空白(即包含至少一个非空白字符)。
- 逻辑:
- 如果字符串是
null
→ 返回 false
- 如果字符串是空字符串
""
→ 返回 false
- 如果字符串全是空白字符(如
" "
)→ 返回 false
- 其他情况(包含至少一个非空白字符)→ 返回
true
public static boolean isNotBlank(String str) {
return !isBlank(str); // isBlank 检查 str == null 或 trim 后长度为 0
}
场景对比示例
字符串 | isNotEmpty | isNotBlank |
---|
null | false | false |
"" | false | false |
" " | true | false |
"abc" | true | true |
" abc " | true | true |
性能对比场景实例
场景 | isNotEmpty 速度 | isNotBlank 速度 |
---|
字符串为 null | ✅ 快(O(1)) | ✅ 快(O(1)) |
字符串为 "" | ✅ 快(O(1)) | ✅ 快(O(1)) |
字符串为 " " | ✅ 快(O(1)) | ❌ 慢(O(n),需遍历所有字符) |
字符串为 "abc" | ✅ 快(O(1)) | ✅ 较快(O(1),首字符非空白) |
字符串为 " a " | ✅ 快(O(1)) | ✅ 较快(O(1),中间有非空白) |
实际建议
- 性能优化关键点:
在需要高频调用且对性能敏感的场景(例如处理海量数据),优先使用 isNotEmpty
。 - 逻辑正确性优先:
如果业务要求必须排除空白字符(如验证用户输入),即使 isNotBlank
稍慢,也应选择它。