大家好,我是Java1234_小锋老师。
写表单校验、接口参数检查时,这两个方法名字很像,用起来却容易踩坑。这篇文章用几个小例子,帮你一次搞懂。
先说一句结论
isEmpty只看长度,isBlank还会把空格当成"空"。
就这么简单。但"空格"这个细节,正是很多人写 bug 的源头。
三种常见的"空"
日常开发里,字符串大概分三类:
| 类型 | 例子 | 人眼感受 |
|---|---|---|
| 真·空字符串 | "" | 啥也没有 |
| 纯空格 | " " | 看起来也是空的 |
| 有内容的字符串 | " hello " | 明显有字 |
isEmpty和isBlank对这三类的判断结果不一样,下面展开说。
isEmpty 是什么
判断字符串长度是否为 0。
null→ 通常抛异常或返回true(看具体库的实现)""→true" "→false(它有长度,只是全是空格)"abc"→false
一句话:只要字符个数大于 0,就不算 empty。
isBlank 是什么
判断字符串是否"没有有效内容"——空字符串、纯空格都算 blank。
null→ 通常视为 blank""→true" "→true"abc"→false" abc "→false(中间有字母,就不 blank 了)
一句话:trim 之后长度为 0,就算 blank。
一张表看懂区别
| 输入值 | isEmpty | isBlank |
|---|---|---|
null | 视库而定 | 视库而定 |
"" | ✅ true | ✅ true |
" " | ❌ false | ✅ true |
" hi " | ❌ false | ❌ false |
看到" "那一行了吗?这是唯一的分水岭。
代码实战
Java(Apache Commons Lang)
importorg.apache.commons.lang3.StringUtils;publicclassEmptyBlankDemo{publicstaticvoidmain(String[]args){// 空字符串System.out.println(StringUtils.isEmpty(""));// trueSystem.out.println(StringUtils.isBlank(""));// true// 纯空格 —— 关键差异在这里System.out.println(StringUtils.isEmpty(" "));// falseSystem.out.println(StringUtils.isBlank(" "));// true// 有内容System.out.println(StringUtils.isEmpty("hi"));// falseSystem.out.println(StringUtils.isBlank("hi"));// false}}Java(Spring 框架)
Spring 的StringUtils思路一样,只是包名不同:
importorg.springframework.util.StringUtils;publicclassSpringDemo{publicstaticvoidmain(String[]args){System.out.println(StringUtils.hasLength(""));// false,类似 isEmpty 取反System.out.println(StringUtils.hasText(" "));// false,类似 isBlank 取反// hasText = 有实际文字内容,空格不算}}自己手写一个 isBlank(帮助理解原理)
/** * 手写 isBlank,理解底层逻辑 */publicstaticbooleanisBlank(Stringstr){if(str==null||str.isEmpty()){returntrue;}// 逐个字符检查是否都是空白for(inti=0;i<str.length();i++){if(!Character.isWhitespace(str.charAt(i))){returnfalse;}}returntrue;}前端 JavaScript 对照
JS 没有内置isBlank,但思路可以照搬:
// 类似 isEmptyconstisEmpty=(str)=>str===null||str===undefined||str.length===0;// 类似 isBlankconstisBlank=(str)=>str==null||str.trim().length===0;console.log(isEmpty(" "));// falseconsole.log(isBlank(" "));// true什么时候用哪个
用流程图梳理一下日常场景:
经验法则:
| 场景 | 推荐 |
|---|---|
| 用户输入的昵称、评论、搜索词 | isBlank |
| 接口必填参数校验 | isBlank |
只判断""而不关心空格 | isEmpty |
| 拿不准 | 默认用isBlank,更符合用户直觉 |
大多数业务场景,用户敲几个空格提交,你不希望当成"已填写"——所以isBlank是更常用的选择。
小结
isEmpty:长度为 0 才算空," "不算。isBlank:空字符串 + 纯空格都算"没内容"。- 表单校验、参数检查 → 优先
isBlank。 - 两者不是谁更"高级",而是语义不同,用错了就会在空格输入上出 bug。
下次 Code Review 看到isEmpty校验用户输入,不妨多问一句:空格算不算填了?答案往往决定了该用哪个。
如果这篇文章帮到了你,欢迎收藏,下次判空不再纠结。