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 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ...
随机推荐
- flask使用ajax提交表单
Flask中使用ajax提交表单刷新数据,避免提交表单后使用return render_temp()会刷新页面 <form id ="test_form"> {{ fo ...
- 20145311实验二 "Java面向对象程序设计"
20145311实验二 "Java面向对象程序设计" 程序设计过程 实验内容 使用单元测试.TDD的方式设计实现复数类 Complex 编写代码: 1.首先设计实现复数类 Comp ...
- 【javascript】数据结构-集合
<!DOCTYPE html> <html> <head> <title>集合</title> <meta charset=" ...
- Codeforces Round #419 (Div. 2) A. Karen and Morning(模拟)
http://codeforces.com/contest/816/problem/A 题意: 给出一个时间,问最少过多少时间后是回文串. 思路: 模拟,先把小时的逆串计算出来: ① 如果逆串=分钟, ...
- MySQL事务处理实现方法步骤
需求说明: 案例背景:银行的转账过程中,发生意外是在所难免.为了避免意外而造成不必要的损失,使用事务处理的方式进行处理: A账户现有余额1000元,向余额为200的B账户进行转账500元.可能由于某原 ...
- Java回顾之网络通信
在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信.UDP通信.多播以及NIO. TCP连接 TCP的基础是Socket,在TCP连接中,我们会使用ServerSocket和Soc ...
- 大白菜的装机U盘真不错
今天用大白菜制作了个启动U盘,然后在里面,把[电脑公司]的ghost文件拷贝进去. 重新安装WinXP成功. 注意: 1)直接用[电脑公司]的ISO文件,用Win32DiskImage写到U盘,不知为 ...
- 2018-2019-2 20165332《网络攻防技术》Exp5 MSF基础应用
2018-2019-2 20165332<网络攻防技术>Exp5 MSF基础应用 1.基础问题回答 用自己的话解释什么是exploit,payload,encode. exploit:就是 ...
- VERSIONINFO Resource
转自(http://www.xuebuyuan.com/1202062.html) VERSIONINFO Resource Defines a version-information resourc ...
- 修改Intelij IDEA的maven依据下载为国内镜像(阿里)
1.win7环境,默认情况下在用户目录的.m2下自己新建setting文件.QQ群交流:697028234 .m2\settings.xml 2.settings.xml文件内容为: <sett ...