一、概述

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

二、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. Python中的MySQL接口:PyMySQL & MySQLdb

    MySQLdb模块只支持MySQL-3.23到5.5之间的版本,只支持Python-2.4到2.7之间的版本 PyMySQL支持 Python3.0以后的版本 PyMySQL https://pypi ...

  2. asp.net 获取mp3 播放时长

    1 Shell32 //添加引用:COM组件的Microsoft Shell Controls And Automation //然后引用 using Shell32; //如果出现“无法嵌入互操作类 ...

  3. 20145325张梓靖 《Java程序设计》第1周学习总结

    20145325张梓靖 <Java程序设计>第1周学习总结 教材学习内容总结 JAVA三大平台:Java SE.Java EE .Java ME Java SE四个组成部分:JVM .JR ...

  4. git基本配置及使用

    目录 设置git git remote git-flow git merge 与 git rebase 参考 Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要S ...

  5. 使用ShellExecute打开目标文件所在文件夹并选中目标文件

    转载:http://blog.csdn.net/chenlycly/article/details/7366364 转载:http://bbs.csdn.net/topics/50440550 She ...

  6. spring boot2 基于百度云apiface实现人脸检测与认证2

    接上一篇,上篇只实现了人脸的认证,接下来实现人脸的检测. 原理介绍: 把摄像头抓拍的图像上传到服务器,服务器把图像上传到百度云,百度云返回识别出的人脸的数量和位置,前端根据服务端的返回,在图像中画出人 ...

  7. 简单购物车的实现,session的使用

    购物车浏览商品界面代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  8. python函数返回局部变量,局部&全局变量同名问题

    其实关于返回局部变量不只是python的问题,凡是使用堆栈结构处理函数的语言都会有这样的问题,切记不要返回局部变量.因为当创建函数的堆栈撤销,所有对局部变量的修改都灰飞烟灭.来看我的小例子 def h ...

  9. 一定要用Windows自带的记事本编辑 applicationHost.config

    访问IIS时,发生了一个 HipIISEngineStub.dll不能读取的问题.(Windows Event可以确认). 很容易在网上找到了对策, http://chrisfleischhacker ...

  10. Vue.js图片预览插件

    vue-picture-preview-extend vue-picture-preview的扩展版本,本文中插件是由其他大神开发,我做了一些扩展,原文链接:https://segmentfault. ...