StringUtils.isEmpty()和isBlank()的区别
2017-03-03 13:53
288 查看
一、概述
两种判断字符串是否为空的用法都是在程序开发时常用的,相信不少同学在这种简单的问题上也吃过亏,到底有什么区别,使用有什么讲究,带着问题往下看。二、jar包
commons-lang3-3.5.jar三、isEmpty详解
3.1 源码
public static boolean isEmpty(CharSequence cs) { return cs == null || cs.length() == 0; }
此时发现isEmpty参数是“CharSequence”类型,按之前正常的使用,再看String类的实现:
public final class String implements java.io.Serializable, Comparable<String>, CharSequence{ ... ... }
String类实现了CharSequence接口,所以,正常使用时,我们只需要放字符串即可。
再回顾isEmpty源码,很简单,为null或长度为0即判定为Empty。
3.2 示例
public static void main(String[] args){ StringUtils.isEmpty(null); //true StringUtils.isEmpty(""); //true StringUtils.isEmpty(" "); //false StringUtils.isEmpty(" "); //false StringUtils.isEmpty("a"); //false StringUtils.isEmpty(" abc "); //false StringUtils.isEmpty(" \t \n \u000B \f \r \u001C \u001D \u001E \u001F"); //false }
通过示例可以看出,空格、制表符也被当成字符来计算长度,若项目中参数传入为空白字符,结果会事与愿违!
四、isBlank详解
4.1 源码
public static boolean isBlank(CharSequence cs) { int strLen; if(cs != null && (strLen = cs.length()) != 0) { for(int i = 0; i < strLen; ++i) { if(!Character.isWhitespace(cs.charAt(i))) { return false; } } return true; } else { return true; } }
isBlank也不是很复杂,再看核心源码Character.isWhitespace:
public static boolean isWhitespace(char ch) { return isWhitespace((int)ch); } public static boolean isWhitespace(int codePoint) { //CharacterData.of方法的实现可自行研究! return CharacterData.of(codePoint).isWhitespace(codePoint); }
通过看源码注释,找到满足空白字符的条件:
It is a Unicode space character ({SPACE_SEPARATOR},{LINE_SEPARATOR}, or {PARAGRAPH_SEPARATOR})
It is \t = \u0009 制表符.
It is \n = \u000A 换行符.
It is \u000B 垂直制表符.
It is \f = \u000C 换页.
It is \r = \u000D 回车.
It is \u001C 文件分隔符.
It is \u001D 分组符.
It is \u001E 记录分隔符.
It is \u001F 单元分隔符.
4.2 示例:
public static void main(String[] args){ StringUtils.isBlank(" \t \n \u000B \f \r \u001C \u001D \u001E \u001F"); //true StringUtils.isBlank(null); //true StringUtils.isBlank(""); //true StringUtils.isBlank(" "); //true StringUtils.isBlank(" "); //true StringUtils.isBlank("abc abc"); //false }
五、结论
isEmpty方法只做了null和length()=0的简单判断。而isBlank在isEmpty方法的基础上,扩展了对空白字符的判断。因此,可以视isBlank是isEmpty的加强版本。程序开发中可根据场景不同合理选择。相关文章推荐
- StringUtils.isEmpty与StringUtils.isBlank的区别及应用场景
- StringUtils.isEmpty和StringUtils.isBlank用法和区别
- StringUtils.isEmpty和StringUtils.isBlank用法和区别
- StringUtils下的isEmpty、isBlank、isNotEmpty、isNotBlank
- StringUtils中 isNotEmpty 和isNotBlank的区别
- StringUtils.isEmpty和StringUtils.isBlank用法和区别
- StringUtils.isEmpty和StringUtils.isBlank的区别
- apache StringUtils isNotEmpty isNotBlank的区别
- StringUtils中 isNotEmpty 和isNotBlank的区别
- StringUtils.isEmpty和StringUtils.isBlank的区别
- StringUtils.isEmpty和StringUtils.isBlank用法和区别
- StringUtils中 isNotEmpty 和isNotBlank的区别
- StringUtils中 isNotEmpty 和isNotBlank的区别
- string比较:“==”,equals(),TextUtils.isEmpty(str),str.isEmpty()的区别
- StringUtils.isEmpty和StringUtils.isBlank用法和区别
- String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()的区别
- (转载)string.IsNullOrEmpty和string.IsNullOrWhiteSpace方法的区别
- Apache Commons Lang的StringUtils.isEmpty(STR)和StringUtils.isBlank(STR)
- string.IsNullOrEmpty和string.IsNullOrWhiteSpace方法的区别
- StringUtil.isEmpty()和StringUtil.isBlank()的区别