开发中常见的String的判空场景总结

1. 判空的必要性

在Java开发中,NullPointerException是最常见的运行时异常之一。良好的判空习惯不仅能提高代码健壮性,还能减少生产环境中的意外错误。当函数缺少判空处理时,轻则导致接口报错,重则造成线程终止,影响系统稳定性。

然而,判空不仅仅是简单的obj != null判断。在实际开发中,我们应当根据对象类型选择合适的判空方式。下面以String类型为例,介绍如何编写更健壮的判空代码。

2. String类型的判空处理

对于String类型的判空,推荐使用org.apache.commons.lang3.StringUtils工具类。许多公司的内部工具类也是基于它开发的,它提供了更全面的字符串判空方法。

以下是StringUtils的典型用法示例:

ini 复制代码
package com.ruoyi.web.testForArticle;


import org.apache.commons.lang3.StringUtils;

public class StringTest {
    public static void main(String[] args) {
        // String类型
        String str = null;
        String str1 = "";
        String str2 = " ";
        String str3 = " a ";
        /**
         *     public static boolean isEmpty(CharSequence cs) {
         *         return cs == null || cs.length() == 0;
         *     }
         */
        //判断是否为空,而且长度为1
        if (StringUtils.isEmpty(str)){
            System.out.println("str的isEmpty测试");
        }
        if (StringUtils.isEmpty(str1)){
            System.out.println("str1的isEmpty测试");
        }
        /**
         *     public static boolean isBlank(CharSequence cs) {
         *         int strLen = length(cs);
         *         if (strLen == 0) {
         *             return true;
         *         } else {
         *             for(int i = 0; i < strLen; ++i) {
         *                  //判断字符串里面的每一个字符是否为空格
         *                 if (!Character.isWhitespace(cs.charAt(i))) {
         *                     return false;
         *                 }
         *             }
         *
         *             return true;
         *         }
         *     }
         */
        if (StringUtils.isBlank(str2)){
            System.out.println("str2的isBlank测试");
        }
        if (StringUtils.isBlank(str3)){
            System.out.println("str3的isBlank测试");
        }

        String str4 = null;
        try {
            str4.split("");
        }catch (NullPointerException e){
            e.printStackTrace();
        }
        String str5 = "Hello qwj";
        //模拟常见的开发环境,从不知道哪里拿出来了一个字符串,我需要提取出qwj的字符
        if (StringUtils.isNotEmpty(str5)){
            String[] s = str5.split(" ");
            System.out.println(s[1]);
        }

        String str6 = "\t\n\r";  // 制表符、换行符、回车符
        System.out.println("str6 isBlank: " + StringUtils.isBlank(str6));  // true
        System.out.println("str6 isEmpty: " + StringUtils.isEmpty(str6));  // false

        String str7 = "  hello  ";
        System.out.println("trim后判空: " + StringUtils.isEmpty(str7.trim()));  // false
        System.out.println("trim后判blank: " + StringUtils.isBlank(str7.trim()));  // false

        String str8 = null;
        // 避免NPE的链式调用
        int length = StringUtils.defaultIfEmpty(str8, "").length();  // 返回0
        System.out.println("str8的安全长度: " + length);

        // 场景:从用户输入或数据库获取可能为null的字符串
        String userInput = null;
        String safeInput = StringUtils.defaultString(userInput, "default");
        System.out.println("处理后的输入: " + safeInput);  // 输出 "default"

        // 场景:拼接前的判空
        String prefix = null;
        String suffix = "World";
        String result = StringUtils.join(prefix, suffix);  // 自动跳过null
        System.out.println("拼接结果: " + result);  // 输出 "World"
    }
}
txt 复制代码
str的isEmpty测试
str1的isEmpty测试
str2的isBlank测试
qwj
str6 isBlank: true
str6 isEmpty: false
trim后判空: false
trim后判blank: false
str8的安全长度: 0
处理后的输入: default
拼接结果: World
java.lang.NullPointerException
	at com.ruoyi.web.testForArticle.StringTest.main(StringTest.java:51)
相关推荐
ZhengEnCi5 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
王中阳Go5 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
程序猿DD5 小时前
OctaFuse Gateway 2.18.0:MCP 接入支持 OAuth,供应商粘性绑定可视化管理
后端
ZhengEnCi7 小时前
Agent 规则管理:让 Memory 做索引、让 Skill 存规则——上下文上限实测与分工方案
后端
nice_lcj5208 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
骑着蜗牛撵大象3278 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
摸爬滚打的小李9 小时前
Spring XML + WAR + Tomcat 项目启动
后端
IT_陈寒10 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
RainbowFish10 小时前
# RAG 与智能体记忆:从原理到工程实践 > 一篇给学习者的总结。
后端
苏三说技术10 小时前
为什么越来越多人用Arthas 4 ?
后端