StringUtils里的isEmpty方法和isBlank方法的区别

StringUtils里的isEmpty方法和isBlank方法的区别前言我们常说的字符串为空,其实就是一个没有字符的空数组。比如:Stringa=””;a就可以称为是一个空字符串。由于String在Java中底层是通过char数组去存储字符串的,所以空字符串对应的char数组表现形式为privatefinalcharvalue[]=newchar[0];但实际工作中,我们可以需要对字符串进行一些校验,比…

大家好,又见面了,我是你们的朋友全栈君。

前言

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

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 后端面经等资源,还有统一环境(教你怎么配置一套开发环境)视频领取。

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131653.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 《手把手教你学DSP-基于TMS320F28335》书中的错误

    《手把手教你学DSP-基于TMS320F28335》书中的错误1.在书的345页,这种字符串写法是错误的,char*msg。2.估计张卿杰可能是个学着。书的风格感觉就是翻译的PDF文档。转载于:https://www.cnblogs.com/429512065qhq/p/9686253.html…

  • document.getElementById使用[通俗易懂]

    document.getElementById使用[通俗易懂]HTMLDOMgetElementById()方法HTMLDOMDocument对象参考手册定义和用法getElementById()方法可返回对拥有指定ID的第一个对象的引用。语法document.getElementById(id)说明HTMLDOM定义了多种查找元素的方法,除了getElementById()之外,还有get

  • 线程池拒绝策略详解[通俗易懂]

    线程池拒绝策略详解[通俗易懂]线程池拒绝策略详解JDK中已经预设了4种线程池拒绝策略,下面结合场景详细聊聊这些策略的使用场景,以及我们还能扩展哪些拒绝策略。池化设计思想池话设计应该不是一个新名词。我们常见的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先…

  • 高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)[通俗易懂]

    高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)[通俗易懂]高通平台8953 LinuxDTS(DeviceTreeSource)设备树详解之三(高通MSM8953android7.1实例分析篇)本系列导航:高通平台8953 LinuxDTS(DeviceTreeSource)设备树详解之一(背景基础知识篇)高通平台8953 LinuxDTS(DeviceTreeSource)设备树详解之二(DTS设备树匹配过程)高通平台8953 L…

    2022年10月18日
  • idea怎么搭建springboot_你没有创建该项目的权限

    idea怎么搭建springboot_你没有创建该项目的权限一般来说,用IDEA创建SpringBoot项目有两种方式。其一是Spring官网提供了一个快速生成SpringBoot项目的网站,可以在官网直接下载后,再导入IDEA中。另外一种是直接用IDEA创建一个SpringBoot项目,一般开发也是用的这种方式进行创建。虽说SpringBoot简化了Spring的配置,但学习之前需要对Spring基础知识有一定的掌握。……

    2022年10月13日
  • PS图层旋转

    PS图层旋转

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号