String中isEmpty/isBlank和StringUtils中isEmpty/isBlank不同点分析

1、问题概述?

String中自带的isEmpty和isBlank方法和StringUtils工具类中的isEmpty和isBlank方法使用是不同的,使用不当会出现严重问题。

【1、String中isEmpty和isBlank比较】

1、String中isEmpty和isBlank:如果只为null,会抛出异常。

2、String中isEmpty和isBlank不同:isEmpty会将空字符串算作字符串,如String a=" ";长度为1。

isBlank会忽略空字符串,如String a=" ";长度为0。

【2、StringUtilsisEmpty和isBlank比较】

1、StringUtils.isEmpty():检查字符串是否为null或者为"",返回true如:对于空白字符“ ”返回false

2、StringUtils.isBlank():功能与isEmpty()基本相同,但是还过滤空格、制表符、换行符等如对于空白字符“ ”,返回true

2、String中自带的isEmpty和isBlank用法

2.1、isEmpty用法

【isEmpty源码】

从源码中可以看出本质就是判断长度是否为0

   @Override
    public boolean isEmpty() {
        return value.length == 0;
    }

所以如果字符串为null,isEmpty会抛出异常:

【isEmpty用法】

public class Test {
    public static void main(String[] args) {
        String str="";
        System.out.println(str.isEmpty());//true,为空
        String str1=" ";
        System.out.println(str1.isEmpty());//false,不为空
    }
}

2.2、isBlank用法

【isBlank源码】

isBlank中排除了“ ”空字符串的情况。

    public static int indexOfNonWhitespace(byte[] value) {
        int length = value.length;
        int left = 0;
        while (left < length) {
            char ch = getChar(value, left);
            if (ch != ' ' && ch != '\t' && !CharacterDataLatin1.instance.isWhitespace(ch)) {
                break;
            }
            left++;
        }
        return left;
    }

3、StringUtils用法?

我们有很多的场景需要判断对象是否为空或者为null的情况,使用不当容易出现抛异常,从而导致程序运行异常的情况,这个时候我们借助StringUtils工具类将会非常的省心。

使用需要导入一下包:

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

3.1、StringUtils.isEmpty()用法?

【1、isEmpty()和isNotEmpty()用法】

值如果为null或者“”,返回值都会true,isNotEmpty()用法与之相反

public class Test1 {
    public static void main(String[] args) {
        String str="";
        System.out.println(StringUtils.isEmpty(str));//true
        String str=" ";//此处用法与isBlank不同,空白字符不算空
        System.out.println(StringUtils.isEmpty(str));//false
        String str1=null;
        System.out.println(StringUtils.isEmpty(str1));//true
        String str2="123";
        System.out.println(StringUtils.isEmpty(str2));//false
    }
}

【2、isAllEmpty()用法】

接收数组类型,所有值都为null或者“”,返回true

public class Test1 {
    public static void main(String[] args) {
        String []str={null,null,"123"};
        System.out.println(StringUtils.isAllEmpty(str));//false
        String []str1={"","",""};
        System.out.println(StringUtils.isAllEmpty(str1));//true
        String []str2={null,null,null};
        System.out.println(StringUtils.isAllEmpty(str2));//true
    }
}

【3、isNoneEmpty()和isAnyEmpty()】

isNoneEmpty():所有值都不为null或者“”,返回true,isAnyEmpty()只要有一个值为null或者“”,返回true.

public class Test1 {
    public static void main(String[] args) {
        String []str={null,null,"123"};
        System.out.println(StringUtils.isNoneEmpty(str));//false
        String []str1={"","",""};
        System.out.println(StringUtils.isNoneEmpty(str1));//false
        String []str2={null,null,null};
        System.out.println(StringUtils.isNoneEmpty(str2));//false
        String []str3={"1","2","3"};
        System.out.println(StringUtils.isNoneEmpty(str3));//true
    }
}

3.2、StringUtils.isBlank()用法?

【1、isBlank()用法与isNotBlank()用法】

public class Test2 {
    public static void main(String[] args) {
        String str=null;
        System.out.println(StringUtils.isBlank(str));//true
        String str1="";
        System.out.println(StringUtils.isBlank(str1));//true
        String str2=" ";//此处有别于isEmpty,空白字符也为空
        System.out.println(StringUtils.isBlank(str2));//true
        String str3="123";
        System.out.println(StringUtils.isBlank(str3));//false
    }
}

isAllBlank、isAnyBlank、isNoneBlank与isAllEmpty、isAnyEmpty、isNoneBlank功能相似,不举例子了。

3.3、StringUtils.isEmpty和StringUtils.isBlank不同之处

StringUtils.isEmpty():

检查字符串是否为null或者为"",返回true

如:对于空白字符“ ”返回false

StringUtils.isBlank():

功能与isEmpty()基本相同,但是还过滤空格、制表符、换行符等

如对于空白字符“ ”,返回true

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾林小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值