欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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