isEmpty和isBlank的区别
isEmpty
判断字符串是否为空字符串,只要一个任意字符(包括空白字符)就不为空。
看下isEmpty的方法源码:
public static boolean isEmpty(CharSequence cs){
return cs == null || cs.length == 0
}
//输入“ ” 返回false
//输入“” 返回true
//输入“java” 返回false
这个方法只判断了是为null或者长度为0,意味着如果用户输入了“ ”空白字符,这个方法就不通过了,结果就是不为空了。
isBlank
判断字符串是否为空字符串,全部空白字符也为空。
public static boolean isBlank(CharSequence cs){
int strLen = length(cs);
if(strLen == 0){
return true;
}else{
for(int i = 0;i<strLen;++i){
if(!Character.isWhitespace(cs.charAt(i))){
return false;
}
}
return true;
}
}
//输入 “ ” 返回true;
//输入 “” 返回true;
//输入“java”返回false;
第七行,只要有一个字符不为空白字符就返回false, 也就是说,如果全部都为空白字符就返回true,也就是全部空白字符也为空。
isEmpty和isBlank怎么选
很明显,我们要判断一个字符串为空,绝大部分情况下“空白字符”也要为空的,严谨来说肯定要用isBlank,虽然 isEmpty 也可以,但如果在最前端的接口不被拦截掉,请求到了后端的服务、数据库,就可能会造成压力,甚至是系统异常,这是完全可以避免的。
但万事也没有绝对,如果你的程序可以接受任意字符,包括“空白字符”,那就要选择 isEmpty,isBlank 会拦截所有空白字符,就达不到要求。
与之相对应的一般还有isNotEmpty和isNotBlank,这都是对工具类的封装。