zoukankan      html  css  js  c++  java
  • 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(" 	 
     u000B f 
     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 = u0009 制表符.
    • It is = u000A 换行符.
    • It is u000B 垂直制表符.
    • It is f = u000C 换页.
    • It is = u000D 回车.
    • It is u001C 文件分隔符.
    • It is u001D 分组符.
    • It is u001E 记录分隔符.
    • It is u001F 单元分隔符.

    4.2 示例:

    public static void main(String[] args){
        StringUtils.isBlank(" 	 
     u000B f 
     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的加强版本。程序开发中可根据场景不同合理选择。

      注:文章中难免有不足之处,欢迎评论、互动、指正。

    作者: i-nine
    原创不易,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [微信产品经理推荐] 有车一族福音,这个小程序能够帮到你很多忙,功能很逆天!
    微信小程序开闸,关于入口、推广、场景的一些观察与思考
    微信小程序体验(2):驴妈妈景区门票即买即游
    微信小程序的机会在于重新理解群组与二维码
    如何为你的微信小程序体积瘦身?
    体验报告:微信小程序在安卓机和苹果机上的区别
    微信小程序体验(1):携程酒店机票火车票
    张小龙宣布微信小程序1月9日发布,并回答了大家最关心的8个问题
    重点必看:小程序的服务范围限制有哪些?
    一些JS常用的方法
  • 原文地址:https://www.cnblogs.com/ninth/p/6496382.html
Copyright © 2011-2022 走看看