Java 判空的常见方法

这篇具有很好参考价值的文章主要介绍了Java 判空的常见方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 对象判空

if (obj != null) {
    // 进行对象非空判断
}

Object obj = null; // 或者 obj = new Object();
if (obj == null) {
    // 对象为空
}

另外,Guava 库还提供了一个更方便的方法,使用方式如下:

import com.google.common.base.Objects;

if (Objects.isNull(obj)) {
    // 对象为空
}

二、 字符串判空

List<String> list = new ArrayList<>();
if (list == null || list.size() == 0) {
    // list 为空
}

简单,但需要写太多代码判断,会显得有些麻烦。或 使用 Apache Commons Lang3 提供的 判断字符串是否为空或者只包含空格字符。这种方式使用起来非常方便:

import org.apache.commons.lang3.StringUtils;

if (StringUtils.isBlank(str)) {
    // 字符串为空
}

还可采用  Java 8 引入的 String#isEmpty() 方法判断字符串是否为空字符串:

if (str == null || str.isEmpty()) {
    // 字符串为空
}

还有 Java 11 引入的 String#isBlank() 方法判断字符串是否为空或者只包含空格字符:

if (str == null || str.isBlank()) {
    // 字符串为空
}

 若还要 判断字符串是否为空或null:

String str = null; // 或者 str = "";
if (str == null || str.length() == 0 || str.trim().length() == 0) {
    // 字符串为空或null
}

也可以使用 Apache Commons Lang3 库中的 StringUtils 工具类中的 isBlank() 方法进行判断:

import org.apache.commons.lang3.StringUtils;

if (StringUtils.isBlank(str)) {
    // 字符串为空或null或只包含空白字符
}
直接使用 == 判断是否为 null,或使用 equals() 判断是否等于空字符串 "":
String str = null;
if (str == null || str.equals("")) {
    // 字符串为空
}
使用 isEmpty() 方法判断字符串是否为空字符串 "":
String str = "";
if (str.isEmpty()) {
    // 字符串为空
}
使用 isBlank() 方法判断字符串是否为空或全是空格:
String str = "   ";
if (StringUtils.isBlank(str)) {
    // 字符串为空或全是空格
}
使用正则表达式判断字符串是否为空或只包含空格:
String str = "    ";
if (str.matches("\\s*")) {
    // 字符串为空或只包含空格
}
需要注意的是,第三种方法需要导入 StringUtils 类,而第四种方法虽然不需要导入任何类,但比较麻烦,建议使用前三种方法中的一种。

三、 List 判空

        使用 if (list == null || list.isEmpty()) 判断 List 是否为 null 或者是否为空列表。或使用 Java 8 引入的 isEmpty() 方法判断 List 是否为 null 或者是否为空列表:但注意 isEmpty() 方法只会判断集合是否为空,而不会判断集合是否为 null。因此,使用 Collection#isEmpty() 方法之前,要先判断集合是否为 null。如果为 null,则该方法会抛出空指针异常。正确的使用方法如下:

List<Object> list = ...;
if (list != null && !list.isEmpty()) { // 先判断 list 是否为 null,再判断 list 是否为空
    // 进行操作
}

if (list == null || list.isEmpty()) {
    // List 为空
}

上述代码中,先使用 list!=null 来判断 list 是否为 null,如果是,则不会进入条件语句中。如果不是,则使用 !list.isEmpty() 来判断 list 是否为空,如果不为空,则进入条件语句中进行操作。

Java 判空的常见方法 

四、Map 判空

Map<String, String> map = null; // 或者 map = new HashMap<>();
if (map == null || map.isEmpty()) {
    // Map为空或null
}
private void putInfoToMap(Map<String,String> map ,String key ,String value){          
    if(StringUtils.isEmpty(key)){
            return;
    }
    if(StringUtils.isEmpty(value)){
            map.put(key, " ");
    }else{
            map.put(key, value);
       }
    }

 Java 判空的常见方法

 Java 判空的常见方法

 

五、数组判空

String[] array = null; // 或者 array = new String[10];
if (array == null || array.length == 0) {
    // 数组为空或null
}

六、Set判空

Set<String> set = null; // 或者 set = new HashSet<>();
if (set == null || set.isEmpty()) {
    // Set为空或null
}

        在判断集合、数组、对象是否为空时,进行非空判断时最好先判断对象是否存在,否则在对象不存在的情况下操作对象可能会导致空指针异常的发生。

七、文件判空

    public SalaryExcelOperatVo uploadExcel(MultipartFile multipartFile) {

        if (multipartFile==null) {
            log.error("文件不能为空");
             throw new RuntimeException("上传Excel文件内容为空,请重新上传!");
        }
        String fileName = multipartFile.getOriginalFilename();
        //判断文件是否是excel文件
        assert fileName != null;
        if (!fileName.endsWith("xls") && !fileName.endsWith("xlsx")) {
            log.error(fileName + "不是Excel文件!");
            throw new RuntimeException(fileName + "不是Excel文件!");
        }

        //保存文件到本地
        File dir1 = new File("/roots/uploadFile/xzExcel");
        if (!dir1.exists()) {
            dir1.mkdirs();
        }
        //统一日期格式
        LocalDateTime current = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formatted = current.format(formatter);
        //加上三位随机数
        Random random = new Random();
        int end3 = random.nextInt(999);

        File file1 = new File(dir1.getAbsolutePath() + File.separator + formatted + "-" + end3 + "-" + multipartFile.getOriginalFilename());
        try {
            multipartFile.transferTo(file1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("【上传薪资Excel文件已保存到本地:{}】",file1.getAbsolutePath());

        //创建返回对象SalaryExcelOperatVo的实例化对象: result
        SalaryExcelOperatVo result = new SalaryExcelOperatVo();
        //获取excel文件sheet1 的内容
        ArrayList<InSalary> inSalaries1 = readExcel1(file1.getAbsolutePath());

        ArrayList<SalaryStaffPerOneListVo> vo1 = new ArrayList<>();

        SalaryStaffPerOneListVo oneListVo ;

        for(InSalary inSalary1:inSalaries1){
            oneListVo = new SalaryStaffPerOneListVo();
            BeanUtils.copyProperties(inSalary1,oneListVo);
            vo1.add(oneListVo);
}
        result.setSheetOne(vo1);

        //获取excel文件sheet2 的内容
        ArrayList<InSalary> inSalaries2 = readExcel2(file1.getAbsolutePath());

        ArrayList<SalaryStaffPerTwoListVo> vo2 = new ArrayList<>();

        SalaryStaffPerTwoListVo twoListVo ;
        for(InSalary inSalary2:inSalaries2){
            twoListVo = new SalaryStaffPerTwoListVo();
            BeanUtils.copyProperties(inSalary2,twoListVo);
            vo2.add(twoListVo);
        }

        result.setSheetTwo(vo2);

        return result;
    }

八、StringUtils 工具类

        StringUtils 提供了许多字符串操作相关的方法,其中比较常用的包括 isEmpty、isNotEmpty、isBlank 和 isNotBlank,它们的作用如下:

  • isEmpty:判断字符串是否为 null 或长度是否为 0;
  • isNotEmpty:判断字符串是否不为 null 且长度不为 0;
  • isBlank:判断字符串是否为 null、空字符串或全为空格字符;
  • isNotBlank:判断字符串是否不为 null、不为空字符串且不全为空格字符。

isEmpty 和 isNotEmpty 是根据字符串的长度来判断的,而 isBlank 和 isNotBlank 还包括对空格字符的处理。另外,如果字符串为 null,无论使用哪个方法都会返回 true。

以下是 StringUtils.isEmpty、StringUtils.isNotEmpty、StringUtils.isBlank 和 StringUtils.isNotBlank 的源码实现(相对简化),可以更好地理解它们的区别:

public class StringUtils {
    // 判断字符串是否为空(长度是否为 0)
    public static boolean isEmpty(CharSequence cs) {
        return cs == null || cs.length() == 0;
    }

    // 判断字符串是否不为空(长度是否不为 0)
    public static boolean isNotEmpty(CharSequence cs) {
        return !isEmpty(cs);
    }

    // 判断字符串是否为空白(包括 null、空字符串和全为空格字符)
    public static boolean isBlank(CharSequence cs) {
        int length;
        if (cs == null || (length = cs.length()) == 0) {
            return true;
        }
        for (int i = 0; i < length; i++) {
            if (!Character.isWhitespace(cs.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    // 判断字符串是否不为空白(不包括 null、空字符串和全为空格字符)
    public static boolean isNotBlank(CharSequence cs) {
        return !isBlank(cs);
    }
}
private void validChoiceInfo(InSalary data, AnalysisContext context) {

    if(isBlank(data.getUserName())){
        throw new ExcelAnalysisException(String.format("上传失败:第%s行员工姓名为空",context.readRowHolder().getRowIndex()));
    }
    if(isBlank(data.getIdNumber())){
        throw new ExcelAnalysisException(String.format("上传失败:第%s行员工身份证信息为空",context.readRowHolder().getRowIndex()));
    }
}  


  
private void validChoiceInfo(InSalary data, AnalysisContext context) {

if(StrUtil.isBlank(data.getUserName())){
    throw new ExcelAnalysisException(String.format("上传失败:第%s行员工姓名为空",context.readRowHolder().getRowIndex()));
}
if(StrUtil.isBlank(data.getIdNumber())){
    throw new ExcelAnalysisException(String.format("上传失败:第%s行员工身份证信息为空",context.readRowHolder().getRowIndex()));
}
} 


        这两段代码实现的功能是一样的,都是对员工姓名和身份证信息进行非空判断,并在为空的情况下抛出异常。不同之处在于第一段代码使用了 isBlank() 方法,而第二段则使用了 StrUtil.isBlank() 方法。isBlank() 方法是在 JDK 11 中新增的,能够判断字符串是否为空或全为空格,因此不需要再使用 trim() 方法进行判断。而 StrUtil.isBlank() 方法是在 Hutool 库中提供的,功能与 isBlank() 类似,但需要将 Hutool 库引入项目中才能使用。另外,两段代码还有一个细微的差别。第一段代码使用了 if(isBlank(data.getUserName())) 的形式进行判断,而第二段代码使用了 if(StrUtil.isBlank(data.getUserName())) 的形式。这两种写法的效果是一样的,只是调用方法的方式略有不同。文章来源地址https://www.toymoban.com/news/detail-439982.html

到了这里,关于Java 判空的常见方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java判断一个实体是不是空的

    在Java中,我们可以使用以下方法来判断一个实体是否为空: 对象是否为null 可以使用Java中的 == 运算符来判断一个对象是否为null,如果对象为null,则表示对象为空。 例如: 字符串是否为空 可以使用Java中的 isEmpty() 方法来判断一个字符串是否为空,如果字符串为空,则返回

    2024年02月13日
    浏览(45)
  • 判断List、Map集合是否为空的方法

    1.判断List集合是否为空 1.1List集合已经完成初始化  这里的List集合已经完成了初始化操作,相当于是一个瓶子可以装水了,但是此时还没有水。  控制台输出:List is empty.  1.2List集合未完成初始化  这里的List集合,还没有进行初始化,相当于瓶子还不存在,用list.isEmpty()会产

    2024年02月15日
    浏览(62)
  • 浅谈Java判断变量是否为空的问题

      Java的StringUtil.isEmpty(str)和\\\"\\\".equals(str)都是用来判断字符串是否为空的方法,但它们有一些不同的使用场景。 📌 StringUtil.isEmpty()   StringUtil.isEmpty(str)通常用于判断字符串是否为null或者长度为0,如果字符串为null或者长度为0,则返回true,否则返回false。这种方式适用于需

    2023年04月11日
    浏览(114)
  • Coalesce:处理Null值,返回传入的多个字段(属性)中第一个非空的值

    Coalesce函数是SQL中的一个函数,用于返回参数列表中第一个非空的表达式的值。Coalesce函数接受两个或多个参数,它会按顺序依次检查每个参数,返回第一个非空的参数值。如果所有参数都为空,则返回NULL。 Coalesce函数可以用于在SQL中处理空值的情况。在实际的数据处理中,

    2024年02月09日
    浏览(46)
  • Java如何优雅的进行判空

    实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj)、hutool中的ObjectUtil或者直接

    2024年02月09日
    浏览(64)
  • java怎么对对象的每一个字段都判空?

    可以通过反射机制,对 Java 对象中的每一个字段进行判空操作 我们定义了一个  isObjectFieldsNull  方法,该方法接受一个 Java 对象作为参数,使用反射机制遍历该对象中的每一个字段,如果有任何一个字段不为空,则返回  false ;如果所有字段都为空,则返回  true 。 需要注意

    2024年02月10日
    浏览(31)
  • java中判断对象类型的三种方法

    instanceof instanceof 是 Java 中的一个,用于判断一个对象是否是指定类型或其子类型的实例。它的使用格式为: 其中, 对象 是待判断的对象, 类型 是要判断的类型。 instanceof 的返回值是一个布尔值,如果对象是指定类型或其子类型的实例,则返回 true ,否则返回

    2024年02月03日
    浏览(49)
  • IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)

    初学Java语言,熟悉了记事本、EditPlus、NotePad++或Sublime Text3等简易开发工具的Java初学者 熟练使用其他Java集成开发环境(IDE),需要转向IDEA工具的Java工程师们 关注IDEA各方面特性的Java程序发烧友、爱好者 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性

    2024年02月07日
    浏览(69)
  • 数据结构:栈(Stack)的各种操作(入栈,出栈,判断栈非空,判断栈已满,附源码)

    前言: 在前面的文章中,我们讲解了 顺序表,单链表,双向链表 。而我们今天要分享的栈则是基于之前的数据结构上搭建的,但是相较于顺序表和链表来说,栈的实现就非常简单了。 目录 一.栈(Stack)的概念 二.栈的数据结构 三.栈的实现 判断栈已满 判断栈非空 入栈push 出栈

    2024年02月05日
    浏览(38)
  • JS对象判空

    第一种:Object.getOwnPropertyNames()  获取自身对象中所有的属性名,但是不包含Symbol!返回一个数组,不论属性描述符是否是可枚举的 第二种:Object.keys()  获取自身对象中所有可枚举的属性名,但是不包含Symbol 第三种:JSON.stringify()  序列化一个对象,返回自身对象中所有可枚

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包