1. 简介
在 Java 开发中,判断一个字符串是否为空(empty)或仅由空白字符组成(blank)是常见的需求。本文将介绍几种判断方式,包括原生 Java 方法和常用第三方库的使用。
2. 空字符串 vs 空白字符串
在开始之前,先明确几个概念:
- 空字符串(empty):长度为 0 的字符串,或值为
null
。 - 空白字符串(blank):仅由空白字符(如空格、制表符、换行符等)组成的字符串。
比如:
String empty = ""; // 空字符串
String blank = " \t\n"; // 空白字符串
String normal = "Hello"; // 非空非空白
3. 判断空字符串
3.1 使用 Java 6 及以上版本
Java 6 引入了 String.isEmpty()
方法,可以非常方便地判断空字符串:
boolean isEmptyString(String string) {
return string == null || string.isEmpty();
}
✅ 优点:简洁直观
⚠️ 注意:不会判断空白字符串
3.2 使用 Java 5 及以下版本
在 Java 6 之前,可以使用 length()
方法替代:
boolean isEmptyString(String string) {
return string == null || string.length() == 0;
}
实际上,isEmpty()
方法内部就是调用了 length() == 0
。
4. 判断空白字符串
要判断一个字符串是否为“空白”,可以使用 trim()
方法去掉前后空白字符后判断是否为空:
boolean isBlankString(String string) {
return string == null || string.trim().isEmpty();
}
⚠️ 注意:trim()
会移除 Unicode 值小于等于 U+0020
的字符(包括空格、换行、制表符等)
✅ 优点:兼容性好
❌ 缺点:会创建新的字符串对象,影响性能
4.1 Java 11 及以上推荐方式
Java 11 新增了 isBlank()
方法,直接判断字符串是否为空白:
boolean isBlankString(String string) {
return string == null || string.isBlank();
}
✅ 优点:无需创建新字符串,性能更好
✅ 推荐:如果使用 Java 11+,优先使用此方法
5. 使用正则表达式(Bean Validation)
在 Java Bean 验证中,可以使用正则表达式来排除空白字符串:
@Pattern(regexp = "\\A(?!\\s*\\Z).+")
String someString;
这个正则表达式表示:不允许全是空白字符的字符串通过验证。
6. 使用 Apache Commons Lang
Apache Commons Lang 提供了非常实用的 StringUtils
工具类,支持多种字符串判断方法。
Maven 依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
示例代码:
StringUtils.isEmpty(string); // 判断是否为空
StringUtils.isBlank(string); // 判断是否为空白
✅ 优点:null-safe,无需额外判断
✅ 推荐:适用于大多数项目,功能全面
7. 使用 Guava
Google 的 Guava 库也提供了字符串判断方法。
Maven 依赖(JRE 版):
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>
示例代码:
Strings.isNullOrEmpty(string);
⚠️ 注意:这个方法不会判断空白字符串,只判断是否为 null
或空字符串。
8. 使用 Spring 的 ObjectUtils
Spring Core 提供了 ObjectUtils
类用于判断字符串是否为空。
Maven 依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.0</version>
</dependency>
示例代码:
ObjectUtils.isEmpty(string);
⚠️ 注意:和 Guava 一样,也不会判断空白字符串
9. 总结
方法 | 是否判断空白 | 是否 null-safe | 推荐 |
---|---|---|---|
isEmpty() |
❌ | ❌ | ✅(配合 null 判断) |
isBlank() (Java 11+) |
✅ | ❌ | ✅✅ |
trim().isEmpty() |
✅ | ❌ | ✅ |
StringUtils.isBlank() (Apache Commons) |
✅ | ✅ | ✅✅✅ |
Strings.isNullOrEmpty() (Guava) |
❌ | ✅ | ⚠️ |
ObjectUtils.isEmpty() (Spring) |
❌ | ✅ | ⚠️ |
✅ 推荐做法:
- 使用 Java 11+:优先使用
isBlank()
- 否则:使用 Apache Commons Lang 的
StringUtils.isBlank()
,简洁、高效、null-safe
📌 GitHub 示例地址:点击查看完整示例代码