一、概述

两种判断字符串是否为空的用法都是在程序开发时常用的,相信不少同学在这种简单的问题上也吃过亏,到底有什么区别,使用有什么讲究,带着问题往下看。

二、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()的区别的更多相关文章

  1. java判断一个字符串是否为空,isEmpty和isBlank的区别

    转载于:https://blog.csdn.net/liusa825983081/article/details/78246792 实际应用中,经常会用到判断字符串是否为空的逻辑 比较简单的就是用 S ...

  2. java中StringUtils中isEmpty 和isBlank的区别

    StringUtils在commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; StringUtils方法的操作对象是java.lan ...

  3. StringUtils中isEmpty 和isBlank的区别

    StringUtils在commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; StringUtils方法的操作对象是java.lan ...

  4. StringUtils里的isEmpty和isBlank的区别

    这边首先以一个简单的测试代码来解释这两者的区别: @Test void stringTest(){ String a = " "; boolean empty = StringUt ...

  5. StringUtils中 isEmpty 和isBlank的区别

    StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出Nu ...

  6. StringUtils类中isEmpty与isBlank的区别

    org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ...

  7. StringUtils类中 isEmpty() 与 isBlank()的区别

    org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ...

  8. org.apache.commons.lang.StringUtils中isEmpty和isBlank的区别

    public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是str==null或str.length()==0 StringUtils.isE ...

  9. StringUtils 中 isEmpty 和 isBlank 的区别

    在项目的工作学习中经常用到了 apache  commons 中的 StringUtils 的 isBlank 和 isEmpty 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ...

随机推荐

  1. scp命令简单应用

    实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft ...

  2. table--边框样式设置

    Table的一些设置(自适应以及溢出)   table的两个属性 单行溢出点点显示 表格的宽度设置 双栏自适应连续连续英文符换行 1.table重置的两个属性: ①border-collapse: c ...

  3. MSF基础攻击实践报告

    MSF基础攻击实践 MSF的六个模块:exploit,encoder,payload,aux,post,nops exploit——渗透攻击模块 测试者利用它来攻击一个系统,程序,或服务,以获得开发者 ...

  4. Cooperation.GTST团队第一周项目总结

    Cooperation.GTST团队第一周项目总结 团队项目 项目内容:我们打算利用Android Studio开发一款博客园的Android APP,初步设想能够实现在Android手机平台使用博客 ...

  5. 设置VS快捷代码片段

    一.自定义sinppets方式 1.在VS安装路径[D:\vs2013\VC\Snippets\2052\Visual C++]下新建一个snippt文件 2.添加代码 <?xml versio ...

  6. LA 6891 Money Transfers(最短路)

    https://vjudge.net/problem/UVALive-6891 题意: 给定一个加权无向图,还有起点和终点,现在有个SWERC公司,拥有图中的m个顶点,现在可以使图中的每一条边都加上k ...

  7. taglist-plus 安装使用

    taglist 可以查看文件中的 类,函数,变量等信息. 在.vimrc中添加: Plugin 'taglist-plus' 然后打开vim编辑器 PluginInstall 使用: 打开taglis ...

  8. Sum Problem

    2018-04-22 19:59:52 Sum系列的问题是Leetcode上的一个很经典的系列题,这里做一个简单的总结. 167. Two Sum II - Input array is sorted ...

  9. chrome插件访问原始页面的变量

    开发chrome插件时遇到需要获取原始网页中的一个js变量的值问题.由于content.js和原始网页的作用域环境不同,无法直接获取变量的值,提示undefined.谷歌找到大神提供的办法.综合起来记 ...

  10. 002PHP文件处理——文件处理 is_dir mkdir getcwd chdir rmdir

    <?php /** * 66 文件处理 is_dir mkdir getcwd chdir rmdir */ //is_dir() 判断一个目录是否存在 //var_dump(is_dir('6 ...