专栏首页bingfeng-技术字符串、集合如何判断空值?看看成年人的正确操作

字符串、集合如何判断空值?看看成年人的正确操作

在平时的开发中,基本上都会用到字符串判断空值和集合判断空值的处理,还记得在刚干开发的时候,写的代码在现在看起来是真的有点Hello World,那么这次分享两个非常常用的方法,字符串非空判断和集合非空判断

字符串非空判断

你有没见过下面的代码,要是没见过你就不配是一个程序员,我还写过呢!现在回过头来看感觉自己当年真的是太年轻了。

public static void main(String[] args) {

    String str = "bingfeng";

    if (str == null || str.equals("")) {

    }
}

那么经历同事的各种嫌弃之后,现在终于不这么写了,要是现在看到那个初级工程师这么写,肯定叫兄弟过去欺负他。

除了这种写法之外,也见到过有些人愿意自己去实现封装一层,写一个工具类用,其实真的感觉没必要,切莫重复早轮子。这种东西别人已经帮我们做好了,而且也比我们这些菜鸟做的好多了,所以推荐直接用就行了。

我们直接引入pom文件即可,他给我们提供了一些基础的功能供我们使用。

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

首先第一种,isNotEmpty 这个方法可以判断字符串是否为空。第二种,isNotBlank 这个方法也是用来判断字符串是否为空。

public static void main(String[] args) {

    String str = "bingfeng";

    if (StringUtils.isNotBlank(str)) {

        System.out.println("isNotBlank:" + str);
    }

    if (StringUtils.isNotEmpty(str)) {

        System.out.println("isNotEmpty:" + str);
    }
}

既然上面两种方法都可以判断时候为空,那又有什么区别呢?首先两个方法都可以判断字符串是否为null,但是我们平常在业务中,特别是用户搜索,用户很可能输入空白字符,如果用户什么也没输入,就敲了两个空格,那么提交到后台,按道理来说空字符串肯定是不合法的,那么此时的isNotEmpty是无法判断的,相反isNotBlank却可以在去除字符串两边的空格然后再进行判断,所以这里推荐大家使用 isNotBlank 更为安全。

集合空值判断

再来看一段当年的传奇之作

public static void main(String[] args) {

    List<String> list = new ArrayList<>();

    if (list == null || list.size() <= 0) {

    }
}

一般对集合都要进行两项判断,首先判断是否不为null,其次判断是否不为空,如果都满足,再进行下面的操作,我们用上面的写法虽说没什么问题,但是真的有点太年轻了。

推荐写法:

public static void main(String[] args) {

    List<String> list = new ArrayList<>();

    if (CollectionUtils.isEmpty(list)) {

    }
}

我们来看下这个方法的底层实现,便会长大许多。

public static boolean isEmpty(@Nullable Collection<?> collection) {
    return collection == null || collection.isEmpty();
}

写到这里,基本上就差不多啦,但是还是透露一下我常用的秘籍,我一般都会对判断集合的方式,做一层包装做成一个工具类,提供更多的方法提高代码的复用性。大家且看下面。

/**
 * @Description: TODO <集合工具类>
 * @Date: 2019/10/15/015  09:32
 * @Author: bingfeng
 */
public class ArrayUtil {

    /**
     * 判断集合是否为空
     *
     * @param collection
     * @return
     */
    public static boolean isEmpty(Collection<?> collection) {
        return CollectionUtils.isEmpty(collection);
    }

    /**
     * 将集合中的元素输出为字符串,并用{@code separator}连接
     *
     * @param collection
     * @param separator
     * @return
     */
    public static String join(Collection<?> collection, String separator) {

        if (isEmpty(collection)) {
            return null;
        }

        StringBuffer sb = new StringBuffer();
        for (Object o : collection) {
            sb.append(o).append(separator);
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    /**
     * 创建一个空的集合
     *
     * @return
     */
    public static <T> List<T> emptyList() {
        return Collections.emptyList();
    }

    /**
     * 将字符串按特定字符分割
     *
     * @param str
     * @param separator
     * @return
     */
    public static List<String> transition(String str, String separator) {

        if (StringUtils.isBlank(str)) {
            return emptyList();
        }

        String[] split = str.split(separator);

        return Arrays.asList(split);
    }
}

道阻且长,就让我们恩恩爱爱,活得潇潇洒洒吧。。。

本文分享自微信公众号 - 一个程序员的成长(xiaozaibuluo),作者:bingfeng

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最最最常见的Java面试题总结推送给你们

    首先要明确的是:“对象传递(数组、类、接口)是引用传递,原始类型数据(整型、浮点型、字符型、布尔型)传递是值传递。”

    一个程序员的成长
  • SpringBoot中的异常处理和参数校验

    兄弟们好,这次来跟老铁交流两个问题,异常和参数校验,在说参数校验之前我们先来说异常处理吧,因为后面参数的校验会牵扯到异常处理这块的内容。

    一个程序员的成长
  • SpringBoot中的异常处理与参数校验

    兄弟们好,这次来跟老铁交流两个问题,异常和参数校验,在说参数校验之前我们先来说异常处理吧,因为后面参数的校验会牵扯到异常处理这块的内容。

    一个程序员的成长
  • SpringBoot入门建站全系列(二)Controller种类及映射处理详解

    Controller及Mapping其实不属于SpringBoot,SpringBoot只是个大杂烩的容器而已。Controller及Mapping分别在Spr...

    品茗IT
  • StringUtils的源码解析

    爱撒谎的男孩
  • SpringBoot入门建站全系列(二)Controller种类及映射处理详解

    Controller及Mapping其实不属于SpringBoot,SpringBoot只是个大杂烩的容器而已。Controller及Mapping分别在Spr...

    品茗IT
  • 函数式接口小结

    如果说一个接口内有且只有一个方法,而且该方法是一个缺省属性为public abstract方法,该接口可以称之为是一个函数式接口。

  • Kotlin Primer·第二章·基本语法

    用户1907613
  • Java工具集-字符串(StringUtils)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    黄小斜

扫码关注云+社区

领取腾讯云代金券