StringUtils.isEmpty()和isBlank()的区别
一、概述
两种判断字符串是否为空的用法都是在程序开发时常用的,相信不少同学在这种简单的问题上也吃过亏,到底有什么区别,使用有什么讲究,带着问题往下看。
二、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()和isBlank()的区别的更多相关文章
- java判断一个字符串是否为空,isEmpty和isBlank的区别
		转载于:https://blog.csdn.net/liusa825983081/article/details/78246792 实际应用中,经常会用到判断字符串是否为空的逻辑 比较简单的就是用 S ... 
- java中StringUtils中isEmpty 和isBlank的区别
		StringUtils在commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; StringUtils方法的操作对象是java.lan ... 
- StringUtils中isEmpty 和isBlank的区别
		StringUtils在commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; StringUtils方法的操作对象是java.lan ... 
- StringUtils里的isEmpty和isBlank的区别
		这边首先以一个简单的测试代码来解释这两者的区别: @Test void stringTest(){ String a = " "; boolean empty = StringUt ... 
- StringUtils中 isEmpty 和isBlank的区别
		StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出Nu ... 
- StringUtils类中isEmpty与isBlank的区别
		org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ... 
- StringUtils类中 isEmpty() 与 isBlank()的区别
		org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ... 
- org.apache.commons.lang.StringUtils中isEmpty和isBlank的区别
		public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是str==null或str.length()==0 StringUtils.isE ... 
- StringUtils 中 isEmpty 和 isBlank 的区别
		在项目的工作学习中经常用到了 apache commons 中的 StringUtils 的 isBlank 和 isEmpty 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ... 
随机推荐
- scp命令简单应用
			实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft ... 
- table--边框样式设置
			Table的一些设置(自适应以及溢出) table的两个属性 单行溢出点点显示 表格的宽度设置 双栏自适应连续连续英文符换行 1.table重置的两个属性: ①border-collapse: c ... 
- MSF基础攻击实践报告
			MSF基础攻击实践 MSF的六个模块:exploit,encoder,payload,aux,post,nops exploit——渗透攻击模块 测试者利用它来攻击一个系统,程序,或服务,以获得开发者 ... 
- Cooperation.GTST团队第一周项目总结
			Cooperation.GTST团队第一周项目总结 团队项目 项目内容:我们打算利用Android Studio开发一款博客园的Android APP,初步设想能够实现在Android手机平台使用博客 ... 
- 设置VS快捷代码片段
			一.自定义sinppets方式 1.在VS安装路径[D:\vs2013\VC\Snippets\2052\Visual C++]下新建一个snippt文件 2.添加代码 <?xml versio ... 
- LA 6891 Money Transfers(最短路)
			https://vjudge.net/problem/UVALive-6891 题意: 给定一个加权无向图,还有起点和终点,现在有个SWERC公司,拥有图中的m个顶点,现在可以使图中的每一条边都加上k ... 
- taglist-plus 安装使用
			taglist 可以查看文件中的 类,函数,变量等信息. 在.vimrc中添加: Plugin 'taglist-plus' 然后打开vim编辑器 PluginInstall 使用: 打开taglis ... 
- Sum Problem
			2018-04-22 19:59:52 Sum系列的问题是Leetcode上的一个很经典的系列题,这里做一个简单的总结. 167. Two Sum II - Input array is sorted ... 
- chrome插件访问原始页面的变量
			开发chrome插件时遇到需要获取原始网页中的一个js变量的值问题.由于content.js和原始网页的作用域环境不同,无法直接获取变量的值,提示undefined.谷歌找到大神提供的办法.综合起来记 ... 
- 002PHP文件处理——文件处理 is_dir  mkdir  getcwd  chdir  rmdir
			<?php /** * 66 文件处理 is_dir mkdir getcwd chdir rmdir */ //is_dir() 判断一个目录是否存在 //var_dump(is_dir('6 ... 
