org.apache.commons.lang3中的isBlank和isEmpty
程序员文章站
2024-03-07 13:34:33
...
最近在做代码reviewed的时候,发现项目中对字符串的非空校验使用了org.apache.commons.lang3包,有的地方使用了isBlank,有的地方使用了isEmpty.那么问题来了,使用他们两个有什么区别呢?
话不多说,先上代码,查看运行结果
import org.apache.commons.lang3.StringUtils;
/**
* @author jerry
* @date 2019-12-08
*/
public class IsblannkAndIsEmpty {
public static void main(String[] args) {
System.out.println(StringUtils.isBlank(""));
System.out.println(StringUtils.isBlank(" "));
System.out.println(StringUtils.isBlank("\n"));
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(" "));
System.out.println(StringUtils.isEmpty("\n"));
}
}
运行结果是什么呢?了解源码的同学能脱口而出,下面我们就简单分析一下吧
StringUtils.isBlank
public static boolean isBlank(final CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(cs.charAt(i))) {
return false;
}
}
return true;
}
StringUtils.isEmpty
public static boolean isEmpty(final CharSequence cs) {
return cs == null || cs.length() == 0;
}
对比源码可以发现,isBlank比isEmpty校验更严格一些,默认的一些空格或者转义字符都认为是空。
有了上面两段代码逻辑,我们不难就得倒开始测试demo中的答案
true
true
true
true
true
false
false
true
那么上述两个方法,在什么场景下使用呢?
如果对空校验仅限于“”和null,使用两者没有区别
如果对空校验除了""和null,还包含/t/n/r等校验,则适合用isBlank
推荐阅读
-
php中的单引号、双引号和转义字符详解
-
org.apache.commons.lang3中的isBlank和isEmpty
-
xpath的数据和节点类型以及XPath中节点匹配的基本方法
-
MyBatis中多对多关系的映射和查询
-
Android开发中实现用户注册和登陆的代码实例分享
-
Java中BigDecimal精度和相等比较的坑
-
简单讲解Android开发中触摸和点击事件的相关编程方法
-
php中的抽象方法和抽象类
-
ASP .NET调用javascript中Response.Write和ClientScript.RegisterStartupScript的区别
-
详解Java的Struts框架中栈值和OGNL的使用