杰瑞科技汇

Java字符串为空判断有哪些常用方法?

  1. 空字符串:字符串长度为 0,。
  2. null:字符串对象没有被实例化,指向空。

一个健壮的判断需要同时处理这两种情况,下面我将从最推荐的方法到一些特殊情况,为你详细解析。

Java字符串为空判断有哪些常用方法?-图1
(图片来源网络,侵删)

最推荐的方法:java.util.Objects (Java 7+)

这是现代 Java(7 及以上版本)中最推荐、最简洁、最安全的方法。

Objects.equals()

这个方法可以完美地处理 null 和空字符串的情况,它会先检查两个对象是否为 null,避免 NullPointerException

import java.util.Objects;
public class StringCheck {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "";
        String str3 = "  ";
        String str4 = "Hello";
        // 判断是否为 null 或 ""
        boolean isBlank1 = Objects.equals(str1, ""); // true
        boolean isBlank2 = Objects.equals(str2, ""); // true
        boolean isBlank3 = Objects.equals(str3, ""); // false (因为 str3 是 "  ")
        boolean isBlank4 = Objects.equals(str4, ""); // false
        System.out.println("str1 is null or empty: " + isBlank1);
        System.out.println("str2 is null or empty: " + isBlank2);
        System.out.println("str3 is null or empty: " + isBlank3);
        System.out.println("str4 is null or empty: " + isBlank4);
    }
}

优点:

  • 简洁:一行代码搞定。
  • 安全:内置了 null 检查,不会抛出 NullPointerException
  • 明确:代码意图清晰,直接表达“判断是否等于空字符串”。

经典方法:StringUtils (Apache Commons Lang / Spring)

如果你已经在使用 Apache Commons Lang 或 Spring 框架,StringUtils 是一个非常方便和强大的工具类。

Java字符串为空判断有哪些常用方法?-图2
(图片来源网络,侵删)

StringUtils.isEmpty()StringUtils.isBlank()

这两个方法在 org.apache.commons.lang3.StringUtils 中定义。

  • StringUtils.isEmpty(CharSequence cs): 判断字符串是否为 null 或长度为 0 ()。
  • StringUtils.isBlank(CharSequence cs): 判断字符串是否为 null、空字符串 (),或者只包含空白字符(如空格 \s, 制表符 \t, 换行符 \n 等)。

示例:

import org.apache.commons.lang3.StringUtils;
public class StringCheck {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "";
        String str3 = "   ";
        String str4 = "Hello";
        // 判断是否为 null 或 ""
        boolean isEmpty1 = StringUtils.isEmpty(str1); // true
        boolean isEmpty2 = StringUtils.isEmpty(str2); // true
        boolean isEmpty3 = StringUtils.isEmpty(str3); // false (因为 str3 包含空格)
        boolean isEmpty4 = StringUtils.isEmpty(str4); // false
        System.out.println("str1 isEmpty: " + isEmpty1);
        System.out.println("str2 isEmpty: " + isEmpty2);
        System.out.println("str3 isEmpty: " + isEmpty3);
        System.out.println("str4 isEmpty: " + isEmpty4);
        System.out.println("--------------------");
        // 判断是否为 null, "" 或只含空白字符
        boolean isBlank1 = StringUtils.isBlank(str1); // true
        boolean isBlank2 = StringUtils.isBlank(str2); // true
        boolean isBlank3 = StringUtils.isBlank(str3); // true
        boolean isBlank4 = StringUtils.isBlank(str4); // false
        System.out.println("str1 isBlank: " + isBlank1);
        System.out.println("str2 isBlank: " + isBlank2);
        System.out.println("str3 isBlank: " + isBlank3);
        System.out.println("str4 isBlank: " + isBlank4);
    }
}

优点:

  • 功能强大isBlank() 方法在处理用户输入时非常有用,可以轻松过滤掉纯空格的字符串。
  • 代码可读性高:方法名非常直观。
  • 行业标准:在许多项目中是标准做法。

缺点:

Java字符串为空判断有哪些常用方法?-图3
(图片来源网络,侵删)
  • 需要引入依赖:如果你没有使用相关框架,需要额外添加 commons-lang3 的 Maven/Gradle 依赖。

原生 Java 方法(不推荐,但需了解)

在 Java 7 之前,或者在没有引入第三方库的情况下,开发者通常使用原生方法,这些方法容易出错,不推荐在新代码中使用。

错误的写法(会抛出 NullPointerException

String str = null;
// if (str.equals("")) { // 这行代码会抛出 NullPointerException!
//     System.out.println("String is empty");
// }

原生 Java 的正确写法

为了安全,必须先检查 null

String str = null;
// 方法1:使用 if 条件
if (str == null || str.equals("")) {
    System.out.println("String is null or empty"); // true
}
// 方法2:使用 String.length()
if (str == null || str.length() == 0) {
    System.out.println("String is null or empty"); // true
}

为什么不推荐?

  • 冗长:需要多写几行代码。
  • 容易忘记:开发者很容易忘记 null 检查,导致程序崩溃。
  • 不够优雅:相比 Objects.equals()StringUtils.isEmpty(),代码显得笨拙。

特殊情况:判断是否为“空白字符串”

很多时候,我们不仅想判断 null 和 ,还想判断 这样的字符串,这在处理用户输入(如表单)时非常常见。

使用 String.trim()

String.trim() 方法会移除字符串首尾的空白字符(空格、制表符、换行等),我们可以利用它来判断一个字符串是否“看起来为空”。

String str1 = null;
String str2 = "";
String str3 = "   ";
String str4 = "  Hello  ";
// 判断是否为 null 或 trim() 后为 ""
if (str1 == null || str1.trim().equals("")) {
    System.out.println("str1 is blank (null or empty/whitespace)"); // true
}
if (str2 == null || str2.trim().equals("")) {
    System.out.println("str2 is blank (null or empty/whitespace)"); // true
}
if (str3 == null || str3.trim().equals("")) {
    System.out.println("str3 is blank (null or empty/whitespace)"); // true
}
if (str4 == null || str4.trim().equals("")) {
    System.out.println("str4 is blank (null or empty/whitespace)"); // false
}

注意:上面的代码在 str1null 时,str1.trim() 仍然会抛出 NullPointerException,所以必须先判断 null

更好的方式:StringUtils.isBlank()

如前所述,StringUtils.isBlank() 是处理这种情况的最佳选择,它内部已经做了优化。

// 使用 StringUtils.isBlank() 是最简洁的方式
boolean isBlank = StringUtils.isBlank(str3); // true

总结与最佳实践

场景 推荐方法 代码示例
判断是否为 null Objects.equals() Objects.equals(myString, "")
判断是否为 null, 或纯空白 StringUtils.isBlank() StringUtils.isBlank(myString)
需要处理 null 且项目无依赖 原生 if 判断 if (myString == null || myString.length() == 0)
仅判断 null Objects.isNull() Objects.isNull(myString)myString == null

最终建议:

  1. 如果你使用 Java 7+,优先使用 Objects.equals(str, "") 来判断是否为 null 或空字符串,这是最现代、最安全的选择。
  2. 如果你在处理用户输入或需要严格判断“空白”,并且项目允许引入依赖,强烈推荐使用 StringUtils.isBlank(),它的语义最清晰,功能最贴合需求。
  3. 避免使用 来判断字符串内容是否为空, 判断的是对象的内存地址,而不是字符串的值,只有 str == null 是正确的用法。
  4. 绝对不要在不确定字符串是否为 null 的情况下直接调用 .equals().length()
分享:
扫描分享到社交APP
上一篇
下一篇