在实际开发中很多时候要用到这两个方法去判断是否为空,我看我们公司的项目中把这两个方法都用出花来了。可能有的人不小心,导的包都相差十万八千里。有的人甚至还有手写 String 工具类,当然这些可能都是大神。
我们要导入这个包
import org.apache.commons.lang.StringUtils;
正文
这两个方法都是工 StringUtils 具类里面的方法,都是用来判断字符串是否为空的。像这样类似的 String 工具类存在不同的包中,如 commons-lang3, Spring 等等,这也是造成程序不统一的原因。
我们在使用的时候尽可能的使用lang3 下面的方法,这样不仅可以保证统一性,还可以避免差异化引起的系统潜在 bug
isEmpty :判断字符串是否为空字符串,只要有一个任意字符(包括空白字符)就不为空。
来看 isEmpty 的方法源码:
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
isEmpty通过是非为null和长度进行判断,也就意味着如果用户输入' '
空白字符,就返回false。
isBlank
判断字符串是否为空字符串,全部空白字符也为空。
public static boolean isBlank(String str) {
int strLen;
if (str != null && (strLen = str.length()) != 0) {
for(int i = 0; i < strLen; ++i) {
if (!Character.isWhitespace(str.charAt(i))) {
return false;
}
}
return true;
} else {
return true;
}
}
只要有一个字符不为空白字符就返回 false,也就是说,如果全部都为空白字符就返回 true,也就是全部空白字符也为空。
这时候,如果用户输入 " " 空白字符,这个方法也返回空了,这也是大部分业务场景下我们期望出现的结果。
明白了两个方法的差异那么我们该如何选择呢?其实大部分情况下判断一个字符串为空的话,“空白字符” 也要为空的。严谨来说肯定要用 isBlank。但如果像这种 " " 如果可以再前端过滤掉的话,其实两者都是可以的。
方法都是灵活运用的没有说一定选择那个,根据自己的情况而定就OK。