📫 作者简介:「六月暴雪飞梨花」,专注于研究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,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。