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 示例地址点击查看完整示例代码


原始标题:Checking for Empty or Blank Strings in Java