开发实战|commons-lang3库的字符串工具类空判断

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

引言

Apache Commons Lang3 是一个非常流行的 Java 工具库,提供了许多实用的工具类和方法,用于简化常见的编程任务。它是 Apache Commons 项目的一部分,旨在弥补 Java 标准库的一些不足,并提供更强大的功能。
在这里插入图片描述

简介

关于commons-lang3库之前有讲过一些,例如commons-lang3的StringUtils的join方法和String的join方法,还有一些其他公共库,commons-math3库的架构以及统计类StatUtils。今天想说一下在Java中使用commons-lang3库的StringUtils判断空。

引入依赖

在maven仓库中搜索需要引入的依赖,然后贴在项目的 pom.xml 文件中。在commons-lang3中有两种类型的判断空,分别为 isXXXBlank 格式的方法 和 isXXXEmpty 格式的方法本次使用commons-lang3的最新版,如果出了commons-lang4版本,到时再来写一篇详细介绍。

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.17.0</version>
</dependency>

isXXXBlank格式

现在IDE很智能,当我们数据某一个方法的名称的一部分,可以智能提示有哪些工具和方法。

isBlank

方法定义:检查字符串是否为 null、空字符串或仅包含空白字符(如空格、制表符 \t、换行符 \n 等),如果字符串为 null、空字符串或仅包含空白字符,则返回 true;否则返回 false。
为了更好的说明,点击isBlank直接进入到源代码,查看代码如下(建议最好看下上面的注释,因为作者注释很清晰):

public static boolean isBlank(final CharSequence cs) {
    final int strLen = length(cs);
    // 长度为 0 的字符串
    if (strLen == 0) {
        return true;
    }
    for (int i = 0; i < strLen; i++) {
        // 字符是否白色空格
        if (!Character.isWhitespace(cs.charAt(i))) {
            return false;
        }
    }
    return true;
}

在注释中,可以看到一些特定的参数

/*
* <pre>
* StringUtils.isBlank(null)      = true
* StringUtils.isBlank("")        = true
* StringUtils.isBlank(" ")       = true
* StringUtils.isBlank("bob")     = false
* StringUtils.isBlank("  bob  ") = false
* </pre>
*/

isAllBlank

方法定义:检查所有CharSequence是否为空(“”)、null或仅为空白。一句话解释,是否所有的元素都是空,若是则返回true,否则返回false;当然,集合为空时也是返回true,不单单是集合中的元素。

    public static boolean isAllBlank(final CharSequence... css) {
        if (ArrayUtils.isEmpty(css)) {
            return true;
        }
        for (final CharSequence cs : css) {
            if (isNotBlank(cs)) {
               return false;
            }
        }
        return true;
    }

isAnyBlank

方法定义:检查是否有任何CharSequence为空(“”)或仅为null或空格。可以理解为只要有一个为空则返回true,否则返回false。

public static boolean isAnyBlank(final CharSequence... css) {
    if (ArrayUtils.isEmpty(css)) {
        return false;
    }
    for (final CharSequence cs : css) {
        if (isBlank(cs)) {
            return true;
        }
    }
    return false;
}

示例代码如下,主要是兼容一些其他的数据类型,在使用需要看清楚需求再使用。

/*
* <pre>
* StringUtils.isAnyBlank((String) null)    = true
* StringUtils.isAnyBlank((String[]) null)  = false
* StringUtils.isAnyBlank(null, "foo")      = true
* StringUtils.isAnyBlank(null, null)       = true
* StringUtils.isAnyBlank("", "bar")        = true
* StringUtils.isAnyBlank("bob", "")        = true
* StringUtils.isAnyBlank("  bob  ", null)  = true
* StringUtils.isAnyBlank(" ", "bar")       = true
* StringUtils.isAnyBlank(new String[] {})  = false
* StringUtils.isAnyBlank(new String[]{""}) = true
* StringUtils.isAnyBlank("foo", "bar")     = false
* </pre>
*/

isNoneBlank

与 isAnyBlank() 方法互斥,参考 isAnyBlank() 方法。

isNotBlank

方法定义:isNotBlank():与 isBlank() 相反,检查字符串是否既不是 null,也不是空字符串,也不仅包含空白字符,代码依旧简单。
与 isBlank() 方法互斥,源代码参考 isBlank() 方法。

public static boolean isNotBlank(final CharSequence cs) {
    return !isBlank(cs);
}

注意⚠️:在isXXXBlank格式的方法中,都是方法与方法之间的相互调用关系,掌握其含义,在业务代码中使用起来也是很方便的。

isXXXEmpty格式

与isXXXBlank相似,此处不再赘述。

区别

为了方便,列一个表格(由于其他的方法是相互之间的调用关系,此处没有列出来)如下:

方法名是否为 null返回 true是否为空字符串返回 true是否仅包含空白字符返回 true适用场景
isEmpty判断字符串是否完全为空
isNotEmpty判断字符串是否有内容
isBlank判断字符串是否为空白或无效
isNotBlank判断字符串是否有效且非空白

总结

● isEmpty 和 isNotEmpty:
○ 适合简单的空字符串检查。
○ 不考虑空白字符的影响。
● isBlank 和 isNotBlank:
○ 更适合实际业务场景,尤其是需要处理用户输入时。
○ 能够识别并过滤掉仅包含空白字符的无效输入。



欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月暴雪飞梨花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值