2019.11.25 今天是离职后面试的第二家公司, 面试过程中问到了 你平时是怎么判断字符串不为空的, 我便回答了使用 Commons-lang3 包下的 StringUtils 类 的isNotEmpty 或者 isNotBlank 来处理,并且只知道他们的区别是 :
对 " " 空格字符串处理的时候, isNotEmpty 返回 false而 isNotBlank 返回的是 true. 其他的就不知道了. 没有回答的理所其然呀.
虽然这两个函数 在平时开发中经常使用但是也一直没有去看过这两个函数的区别.今天就来仔细看一看源码吧.
PS:
isNotEmpty 的源码中的实现 是 return ! isEmpty
isNotBlank 的源码中的实现 是 return ! isBlank
所以我们看一下 isEmpty 和 isBlank 的源码即可.
commons-lang3 的版本是 3.4
isEmpty
isEmpty 是 直接判断 入参的字符串 是否为 null 或者字符串的长度是否为0.
那么 " " 这样带空格的字符串的长度 不为 0 ,返回true , 则isNotEmpty 返回 false .
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
isBlank
isBlank 先做了一遍和 isEmpty同样的判断操作, 然后又从左到右依次判断每个字符做 空格校验.
Character.isWhitespace 函数 , 就是对字符进行校验是否为空格的,
这里在字符串 str 中,只要有一个字符不为空格,那么 他就不是空字符串
如果所有的字符都是空格,那么 他就被认定为一个空字符串了.
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}