StringUtils里的isEmpty方法和isBlank方法的区别_stringutils.isblank()和isempty的区别-程序员宅基地

技术标签: java  

前言

我们常说的字符串为空,其实就是一个没有字符的空数组。比如:

String a = "";

a 就可以称为是一个空字符串。由于 String 在 Java 中底层是通过 char 数组去存储字符串的,所以空字符串对应的 char 数组表现形式为 

private final char value[] = new char[0];

实际工作中,我们需要对字符串进行一些校验,比如:是否为 null,是否为空,是否去掉空格、换行符、制表符等也不为空。我们一般都是通过一些框架的工具类去做这些判断,比如:apache 的 commons jar 包。下面就讲述一下常见的两个字符串校验方法以及它们的区别。

PS:最近在写项目的过程中,发现很多地方要做判空操作的,然后有时候可能调用链比较长,如果用 if else 来判空的话,光判空代码就会比较多,这样对后期维护性不好,而且我们自己判空可能会没有考虑某个场景,这样就会导致可能空指针。我现在强烈推荐大家使用第三方 jar 的工具类去做判空。比如:从 Map 中取一个 key 的值,可以用 MapUtils 这个类;对字符串判空使用 StringUtils 这个类;对集合进行判空使用 CollectionUtils 等等。这些类都可以通过引入 apache 的 commons 包系列使用。

isEmpty()

public static boolean isEmpty(String str) {        
    return str == null || str.length() == 0;
}

isBlank()

public static boolean isBlank(String str) {
        int strLen;
        if (str != null && (strLen = str.length()) != 0) {
            for(int i = 0; i < strLen; ++i) {
                // 判断字符是否为空格、制表符、tab
                if (!Character.isWhitespace(str.charAt(i))) {    
                    return false;
                }
            }
            return true;
        } else {
            return true;
        }
    }

结论

通过以上代码对比我们可以看出:

    1.isEmpty 没有忽略空格参数,是以是否为空和是否存在为判断依据。


    2.isBlank 是在 isEmpty 的基础上进行了为空(字符串都为空格、制表符、tab 的情况)的判断。(一般更为常用)


大家可以看下面的例子去体会一下。

StringUtils.isEmpty("yyy") = false
StringUtils.isEmpty("") = true
StringUtils.isEmpty("   ") = false

StringUtils.isBlank("yyy") = false
StringUtils.isBlank("") = true
StringUtils.isBlank("   ") = true

喜欢

喜欢文章的话,可以扫码关注我的微信公众号。

                                                               img

搜索微信公众号:Java知其所以然,可免费领取某课、Java 后端面经等资源,还有统一环境(教你怎么配置一套开发环境)视频领取。

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1102325298/article/details/80410740

智能推荐

用Echarts实现中国地图_echarts中国地图-程序员宅基地

文章浏览阅读1.6w次,点赞41次,收藏211次。闲来无事看了看echarts,感觉挺有趣的就做了个中国地图玩玩,代码已经加了详细注释。先附上最后的动态效果图:ps:数据为本人纯双手乱打需要用到echarts.js和china.js,echarts.js可以去官网下载,也可以直接引入在线链接:https://cdn.staticfile.org/echarts/4.3.0/echarts.min.jschina.js的话,由于蓝奏还不支持上传.js的文件,所以我压缩了一下,下载到本地解压即可使用。也可以百度自行寻找。点这下载不想下载的我也给你准备_echarts中国地图

java字符串转10进制字符串_浅谈java二进制、十进制、十六进制、字符串之间的相互转换...-程序员宅基地

文章浏览阅读965次。1. 字节转10进制直接使用(int)类型转换。/** 字节转10进制*/public static int byte2Int(byte b){int r = (int) b;return r;}2. 10进制转字节直接使用(byte)类型转换。/** 10进制转字节*/public static byte int2Byte(int i){byte r = (byte) i;return r;}3..._java-字节数组长度为5的byte[]转换为10进制-csdn

webpack-dev-server max_old_space_size 内存溢出解决方案_node --max_old_space_size=4096 node_modules/webpac-程序员宅基地

文章浏览阅读8.9k次,点赞2次,收藏4次。vue开发过程中项目中断,并报错 webpack-dev-server配置解决配置添加后npm install 一下 "scripts": { "dev": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --progress --config build/webpack.dev.conf.js", "start": ._node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-d

用C语言判断一个数的位数,并取出每个数字_怎样确定数字的位数并取出来-程序员宅基地

文章浏览阅读1.8w次,点赞62次,收藏97次。这个方法是我在写C语言作业时想出来的简单写下直接求一个数的位数的原理,直接手写了知道了位数再求每个数字就比较好求了#include<stdio.h>#include<math.h>int main(){ int n; int N; int i; int a[10]; scanf("%d", &N);..._怎样确定数字的位数并取出来

java web 项目打包(war 包)并部署_-javaagent 后面可以跟war包吗-程序员宅基地

文章浏览阅读2.2k次。1、在eclipse中右键单击项目,然后Export选择WAR file,生成项目的WAR文件。具体步骤请看图片详细操作步骤:2、把生成的WAR文件放到tomcat解压之后的webapps文件夹下。3、在tomcat的conf文件夹里的server.xml进行配置: 在&lt;Host&gt;&lt;/Host&gt;标签之间添加如下代码: ..._-javaagent 后面可以跟war包吗

全志V853 摄像头初体验_eyesee-mpp-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏6次。选上SDK里面的摄像头demomake menuconfig ---> Allwinner ---> eyesee-mpp ---> [*] mpp sample virvi2vo在sdk根目录下执行cmpp_p,然后打开Makefile,修改:kunyao@AwExdroid89:~/workspace/a_tina/package/allwinner/eyesee-mpp/middleware$ git diff .diff --git a/a._eyesee-mpp

随便推点

meethigher-腾讯课堂自动签到-程序员宅基地

文章浏览阅读7.7k次,点赞6次,收藏20次。腾讯课堂腾讯课堂实现自动化原文链接腾讯课堂以及文库下载实现自动化打开chrome浏览器(其他的也可以,chrome最好啦)。打开开发者工具,直接将代码复制到console栏,按enter键即可。如果还不会用,就点击上面的那个链接。1 开启自动任务自动送花开启一个3秒送花的定时器:let flower=setInterval(function (){ document.getElementsByClassName("toolbar-icon")[2].click(); cons_腾讯课堂自动签到

kvm上的Linux虚拟机使用virtio磁盘-程序员宅基地

文章浏览阅读1.1k次。kvm上的Linux虚拟机使用virtio磁盘系统:centos6.6 64位网上的文章比较少,怎麽将Linux虚拟机的磁盘改为使用virtio磁盘因为centos6或以上系统已经包含了virtio驱动,所以不需要再执行下面语句加载内核模块modprobe virtio virtio_pci virtio_blk virtio_netmkinit...

Zookeeper报错Will not attempt to authenticate using SASL解决办法_will not attempt to authenticate using sasl (unkno-程序员宅基地

文章浏览阅读5.2k次。2.在hbase的conf下hbase-site.xml下配置hbase.zookeeper.quorum这个属性,具体原因看网上有个解释不错在master所在的pc上启动start-all时,内容提示所有的regionserver已经全部启动。二、这个问题的出现,会伴随一个非常奇怪的现象。1.首先确定本地的zk版本跟服务器的zk版本是否一致,简单的就是看依赖的jar包,去zk的安装包下找对应的jar包直接跟本地的比较,操作hbase出现这种情况就是hbase安装目录的lib下找,确定版本一致。..._will not attempt to authenticate using sasl (unknown error)

CompletableFuture异步任务编排用法和详解-程序员宅基地

文章浏览阅读1.4k次。在工作中,常常会调用多个服务或者方法去获取不同的数据,如果传统做法就是串行一个个获取,然后封装返回。我们可以尝试使用CompletableFuture,将多个操作交给异步线程执行,然后主线程等待最长任务完成,将所有结果一并返回即可。Future局限性当我们得到包含结果的Future时,我们可以使用get方法等待线程完成并获取返回值,但我们都知道future.get()是阻塞的方法,会一直等到线程执行完毕拿到返回值。我们可以看到FutureTask中的get方法,就是循环代码直到线程执行完成返回。 .

nodejs的十六进制和字符串转换_node.js 判断是否十六进制-程序员宅基地

文章浏览阅读9.7k次。const Hexstring2btye = (str)=&gt; { let pos = 0; let len = str.length; if (len % 2 != 0) { return null; } len /= 2; let hexA = new Array(); for (let i = 0; i &lt; l..._node.js 判断是否十六进制

0x00007FFE9071C408 (ucrtbase.dll) (xxx.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。_0x00007ffcbcaeafec (ucrtbased.dll) (test.exe 中)处有未-程序员宅基地

文章浏览阅读2.5w次,点赞3次,收藏14次。1.调试VS程序,弹出异常:0x00007FFE9071C408 (ucrtbase.dll) (InnovpowerUAV.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。2.在错误代码地方加入断点,发现变量已经为空。3.查看发现是已经将StdioFile 变量已经关闭,继续写入导致报错。4.将StdioFile 变量close 放置在完成写入动作之后,程序运行正常。反思:出现类似的情况,需要排查变量或文件等是否已经存在。..._0x00007ffcbcaeafec (ucrtbased.dll) (test.exe 中)处有未经处理的异常: 将一个无

推荐文章

热门文章

相关标签