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 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ...
随机推荐
- Python中的MySQL接口:PyMySQL & MySQLdb
MySQLdb模块只支持MySQL-3.23到5.5之间的版本,只支持Python-2.4到2.7之间的版本 PyMySQL支持 Python3.0以后的版本 PyMySQL https://pypi ...
- asp.net 获取mp3 播放时长
1 Shell32 //添加引用:COM组件的Microsoft Shell Controls And Automation //然后引用 using Shell32; //如果出现“无法嵌入互操作类 ...
- 20145325张梓靖 《Java程序设计》第1周学习总结
20145325张梓靖 <Java程序设计>第1周学习总结 教材学习内容总结 JAVA三大平台:Java SE.Java EE .Java ME Java SE四个组成部分:JVM .JR ...
- git基本配置及使用
目录 设置git git remote git-flow git merge 与 git rebase 参考 Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要S ...
- 使用ShellExecute打开目标文件所在文件夹并选中目标文件
转载:http://blog.csdn.net/chenlycly/article/details/7366364 转载:http://bbs.csdn.net/topics/50440550 She ...
- spring boot2 基于百度云apiface实现人脸检测与认证2
接上一篇,上篇只实现了人脸的认证,接下来实现人脸的检测. 原理介绍: 把摄像头抓拍的图像上传到服务器,服务器把图像上传到百度云,百度云返回识别出的人脸的数量和位置,前端根据服务端的返回,在图像中画出人 ...
- 简单购物车的实现,session的使用
购物车浏览商品界面代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- python函数返回局部变量,局部&全局变量同名问题
其实关于返回局部变量不只是python的问题,凡是使用堆栈结构处理函数的语言都会有这样的问题,切记不要返回局部变量.因为当创建函数的堆栈撤销,所有对局部变量的修改都灰飞烟灭.来看我的小例子 def h ...
- 一定要用Windows自带的记事本编辑 applicationHost.config
访问IIS时,发生了一个 HipIISEngineStub.dll不能读取的问题.(Windows Event可以确认). 很容易在网上找到了对策, http://chrisfleischhacker ...
- Vue.js图片预览插件
vue-picture-preview-extend vue-picture-preview的扩展版本,本文中插件是由其他大神开发,我做了一些扩展,原文链接:https://segmentfault. ...