org.apache.commons.lang3中的isBlank和isEmpty

最近在做代码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

你可能感兴趣的:(java)