isBlank()
方法详解:检查字符串是否为空或仅包含空白字符
方法定义
public static boolean isBlank(CharSequence str) {
if (str == null || str.length() == 0) {
return true;
}
for (int i = 0; i < str.length(); i++) {
if (!Character.isWhitespace(str.charAt(i))) {
return false;
}
}
return true;
}
功能说明
检查字符串是否满足以下任一条件:
null
引用- 空字符串 (
""
) - 仅包含空白字符(空格、制表符、换行符等 Unicode 空白符)
示例代码
public class StringUtils {
public static void main(String[] args) {
System.out.println(isBlank(null)); // true
System.out.println(isBlank("")); // true
System.out.println(isBlank(" ")); // true
System.out.println(isBlank("\t\n")); // true
System.out.println(isBlank(" \u2000")); // true (Unicode空白)
System.out.println(isBlank("a")); // false
System.out.println(isBlank(" a ")); // false
}
}
使用技巧
- 用户输入验证:快速检查表单输入是否有效
if (StringUtils.isBlank(username)) { throw new IllegalArgumentException("用户名不能为空"); }
- 数据清洗:跳过空白行处理文本文件
for (String line : lines) { if (!isBlank(line)) process(line); }
- 链式操作:结合
trim()
实现灵活处理String cleanInput = isBlank(rawInput) ? null : rawInput.trim();
常见错误
- 混淆
isEmpty
和isBlank
" ".isEmpty(); // false (错误!) " ".isBlank(); // true (正确)
- 未处理 Unicode 空白符
错误实现(仅检查空格):// 错误!无法检测 \t, \n, \u2000 等 return str.trim().isEmpty();
- 直接调用
trim()
导致性能浪费// 错误!对长字符串先trim()效率低下 if (str != null && str.trim().isEmpty()) ...
注意事项
- 空白字符定义:遵循 Unicode 标准(
Character.isWhitespace()
)- 包括:空格(
\t
)、换行(\n
)、全角空格(\u3000
)等
- 包括:空格(
- 空字符串 vs
null
:两者均视为空白 - 不可见字符:零宽空格(
\u200B
)等不是空白字符isBlank("\u200B"); // false (特殊字符需单独处理)
最佳实践与性能优化
- 优先检查长度:快速过滤非空字符串
if (str == null || str.length() == 0) return true;
- 短路遍历:发现非空白字符立即退出
for (int i = 0; i < str.length(); i++) { if (!Character.isWhitespace(str.charAt(i))) { return false; // 发现非空白立即返回 } }
- 避免
trim()
:trim()
会创建新字符串,直接遍历更高效 - 支持
CharSequence
:兼容String
、StringBuilder
等类型 - Java 11+ 用户:直接使用内置方法
// Java 11+ 原生支持 " ".isBlank(); // true
总结
关键点 | 说明 |
---|---|
核心功能 | 检测 null /空字符串/纯空白字符串 |
性能关键 | 优先检查长度 + 短路遍历 |
与 isEmpty 区别 |
isBlank 额外识别空白字符 |
Java 11+ | 直接使用 String.isBlank() |
典型应用场景 | 输入验证、数据清洗、文本预处理 |
实践建议:
✅ 使用
isBlank()
替代trim().isEmpty()
更高效安全
✅ 处理用户输入时始终优先调用此方法
✅ 注意 Unicode 空白符的特殊性
✅ Java 11+ 项目直接调用原生方法