工具类整理

news2025/1/21 15:36:05

常用工具类

在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的:轮子

CollectionUtils

目前比较主流的是springorg.springframework.util包下的CollectionUtils工具类。和apacheorg.apache.commons.collections包下的CollectionUtils工具类。

但是我个人更推荐使用apache的包下的CollectionUtils工具类,因为它的工具更多更全面。

举个简单的例子,spring的CollectionUtils工具类没有判断集合不为空的方法。而apache的CollectionUtils工具类却有。所以这里就讲Apache下的CollectionUtils工具类的使用。

集合判空

通过CollectionUtils工具类的isEmpty方法可以轻松判断集合是否为空,isNotEmpty方法判断集合不为空。

package yimeng;

import com.ruoyi.RuoYiApplication;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author yimeng
 * @Date 2023/12/3 12:40
 * @PackageName:PACKAGE_NAME
 * @ClassName: yimeng.MyTest
 * @Description: 测试
 * @Version 1.0
 */
@SpringBootTest(classes = RuoYiApplication.class)
public class MyTest {
    @Test
    public void hello () {
        List<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(1);
        list.add(3);

        if (CollectionUtils.isEmpty(list)) {
            System.out.println("集合为空");
        }

        if (CollectionUtils.isNotEmpty(list)) {
            System.out.println("集合不为空");
        }

        List<Integer> list2 = new ArrayList<>();
        if (CollectionUtils.isEmpty(list2)) {
            System.out.println("集合为空");
        }

        if (CollectionUtils.isNotEmpty(list2)) {
            System.out.println("集合不为空");
        }

        List<Integer> list3 = null;
        if (CollectionUtils.isEmpty(list3)) {
            System.out.println("集合为空");
        }

        if (CollectionUtils.isNotEmpty(list3)) {
            System.out.println("集合不为空");
        }
    }
}

在这里插入图片描述

StringUtils

字符串(String)在我们的日常工作中,用得非常非常非常多。

在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。

如果只用String类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。

现在有个好消息是:org.apache.commons.lang3包下的StringUtils工具类,给我们提供了非常丰富的选择。

字符串判空

其实空字符串,不只是null一种,还有"“,” ",“null”(当然哈,对于"null"一般都是认为是单纯的字符串,只是字符串的值是null而已,和普通字符串没什么区别)等等,多种情况。

StringUtils给我们提供了多个判空的静态方法,例如:

package yimeng;

import com.ruoyi.RuoYiApplication;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @Author yimeng
 * @Date 2023/12/3 12:40
 * @PackageName:PACKAGE_NAME
 * @ClassName: yimeng.MyTest
 * @Description: 测试
 * @Version 1.0
 */
@SpringBootTest(classes = RuoYiApplication.class)
public class MyTest {
    @Test
    public void hello() {
        String str1 = null;
        String str2 = "";
        String str3 = " ";
        String str4 = "abc";
        String str5 = "null";
        System.out.println(StringUtils.isEmpty(str1));//true
        System.out.println(StringUtils.isEmpty(str2));//true
        System.out.println(StringUtils.isEmpty(str3));//false
        System.out.println(StringUtils.isEmpty(str4));//false
        System.out.println(StringUtils.isEmpty(str5));//false
        System.out.println("=====");
        System.out.println(StringUtils.isNotEmpty(str1));//false
        System.out.println(StringUtils.isNotEmpty(str2));//false
        System.out.println(StringUtils.isNotEmpty(str3));//true
        System.out.println(StringUtils.isNotEmpty(str4));//true
        System.out.println(StringUtils.isNotEmpty(str5));//true
        System.out.println("=====");
        System.out.println(StringUtils.isBlank(str1));//true
        System.out.println(StringUtils.isBlank(str2));//true
        System.out.println(StringUtils.isBlank(str3));//true
        System.out.println(StringUtils.isBlank(str4));//false
        System.out.println(StringUtils.isBlank(str5));//false
        System.out.println("=====");
        System.out.println(StringUtils.isNotBlank(str1));//false
        System.out.println(StringUtils.isNotBlank(str2));//false
        System.out.println(StringUtils.isNotBlank(str3));//false
        System.out.println(StringUtils.isNotBlank(str4));//true
        System.out.println(StringUtils.isNotBlank(str5));//true
    }
}

在这里插入图片描述

示例中的:isEmptyisNotEmptyisBlankisNotBlank,这4个判空方法你们可以根据实际情况使用。

优先推荐使用isBlankisNotBlank方法,因为它会把" "也考虑进去。

分隔字符串

分隔字符串是常见需求,如果直接使用String类的split方法,就可能会出现空指针异常。

package yimeng;

import com.ruoyi.RuoYiApplication;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;

/**
 * @Author yimeng
 * @Date 2023/12/3 12:40
 * @PackageName:PACKAGE_NAME
 * @ClassName: yimeng.MyTest
 * @Description: 测试
 * @Version 1.0
 */
@SpringBootTest(classes = RuoYiApplication.class)
public class MyTest {
    @Test
    public void hello() {
        String str = "yi,meng";
        System.out.println(StringUtils.split(str,","));
        System.out.println(str.split(","));
        String str1 = null;
        System.out.println(StringUtils.split(str1,","));
        System.out.println(str1.split(","));
    }
}

在这里插入图片描述

使用StringUtils的split方法会返回null,而使用String的split方法会报指针异常。

Objects

jdk7之后,提供了Objects工具类,我们可以通过它操作对象。

对象为空抛异常

如果我们想在对象为空时,抛出空指针异常,可以使用Objects的requireNonNull方法。

package yimeng;

import com.ruoyi.RuoYiApplication;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Objects;

/**
 * @Author yimeng
 * @Date 2023/12/3 12:40
 * @PackageName:PACKAGE_NAME
 * @ClassName: yimeng.MyTest
 * @Description: 测试
 * @Version 1.0
 */
@SpringBootTest(classes = RuoYiApplication.class)
public class MyTest {
    @Test
    public void hello() {
        Integer integer1 = new Integer(128);
        Objects.requireNonNull(integer1);//如果integer1,抛出空指针异常,没有特别指定异常的提示信息
        Objects.requireNonNull(integer1, () -> "参数不能为空");//如果integer1,抛出空指针异常,并异常的提示信息为“参数不能为空”

        Objects.requireNonNull(null, () -> "参数不能为空");//抛出空指针异常,并异常的提示信息为“参数不能为空”
    }
}

在这里插入图片描述

他的源码如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1279943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SmartSoftHelp8,应用程序优化,稳定性优化,性能优化,并发承载优化工具

winform 应用全局捕获异常 WPF 应用全局捕获异常 asp.net web 应用全局捕获异常 MVC web 应用全局捕获异常 netcore 应用全局捕获异常 一级缓存&#xff1a;html、cs&#xff0c;js 网页前端缓存设置 二级缓存&#xff1a;asp.net 客户端缓存设置 二级缓存&#xff…

测试Centos上用Gunicorn启动的Django-Web服务在Django源文件有改变的情况下能否自动重载最新源码下的web服务

01-先上传最新的源码文件 参考博文 https://blog.csdn.net/wenhao_ir/article/details/134762966 进行 02-先在Django直接开web服务下修改源码测试 这是没有问题的&#xff0c;会自己重置。 03-开启gunicorn服务 cd /djangoproject/mmdj01/ gunicorn -c /djangoproject/mm…

【Android】MMKV实现本地持久化

引入 (测试操作机器是华为Mate 20 Pro 128G&#xff0c;Android 10&#xff0c;每组重复1k次&#xff0c;时间单位是ms) 可以看出MMKV的耗时比其他耗时少的离谱。再看多进程下的性能&#xff1a; 不必多说。再看和DataStore的对比&#xff1a; 简介 根据MMKV官方文档所言 MM…

【数电笔记】20-有约束的逻辑函数化简

目录 说明&#xff1a; 约束项和约束条件 1. 引例 1.1 引例中的约束项 1.2 引例中的约束条件 利用约束项 / 约束条件化简逻辑函数 1. 例1 2. 例2 3. 例3 4. 例4 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#xff0…

宝塔+docker+jenkins部署vue项目----笔记版

宝塔dockerjenkins部署vue项目&#xff08;保姆级教程&#xff09;https://blog.csdn.net/weixin_47284756/article/details/129339940 基于上述教程&#xff0c;不同的地方。 1.我使用的是gitee&#xff0c;所以需要在jenkins中安装gitee插件 配置gitee&#xff0c;其他默认配…

基于51单片机的十字路口交通灯_5s黄灯倒计时闪烁

基于51单片机十字路口交通灯_5s黄灯闪烁 &#xff08;程序仿真仿真视频&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;J006 功能要求 交通灯运行状态&#xff1a; &#xff08;1&…

Shell循环:whileuntil

一、特点&#xff1a;循环次数[一定]是固定的 二、while语句结构 while 条件测试 do 循环体 done 当条件测试成立&#xff08;条件测试为真&#xff09;&#xff0c;执行循环体 演示&#xff1a; 需求&#xff1a;每秒显示一个数字&#xff0c;一…

webpack如何处理浏览器的样式兼容问题postcss

一、准备工作 css/index.css添加样式 .word {color: red;user-select: none; } 为了兼容不同的浏览器我们需要添加前缀比如&#xff1a; -webkit-user-select: none; 这个工作可以通过postcss的插件postcss-preset-env处理 二、安装依赖 pnpm i -D postcss postcss-loader…

淘宝店铺所有商品数据接口(淘宝 API 接口)

要获取淘宝店铺所有商品数据&#xff0c;您可以使用淘宝开放平台提供的 API 接口。具体步骤如下&#xff1a; 在淘宝开放平台注册并登录&#xff0c;创建一个应用&#xff0c;获取到所需的 App Key 和 App Secret 等信息。 使用获取到的 App Key 和 App Secret 进行签名和认证…

『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建OA系统

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器&#xff08;Elastic Compute Cloud&#xff09;是亚马…

Python Rich:让终端显示更具视觉效果

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python开发中&#xff0c;命令行界面&#xff08;CLI&#xff09;经常被用于交互和数据展示。虽然命令行界面通常被视为简单、枯燥的文本显示区域&#xff0c;但通过Python的Rich库&#xff0c;我们可以为命令…

Java 使用itextpdf创建Pdf文件

DOM文件添加Maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.0</version><type>pom</type></dependency> 主要代码&#xff1a; PdfFont font PdfFo…

Python程序员入门指南:学习时间和方法

文章目录 标题Python程序员入门指南&#xff1a;学习时间、方法和就业前景学习方法建议学习时间 标题 Python程序员入门指南&#xff1a;学习时间、方法和就业前景 Python是一种流行的编程语言&#xff0c;它具有简洁、易读和灵活的特点。Python可以用于多种领域&#xff0c;如…

ImportError: cannot import name ‘metadata‘ from ‘importlib‘

yolov8 编译问题 ImportError: cannot import name ‘metadata’ from ‘importlib’ 将 from importlib import metadata 更改为 import importlib_metadata as metadata

基于51单片机的交通灯_紧急开关+黄灯倒计时+可调时间

51单片机交通灯_紧急开关黄灯倒计时可调时间 开题报告系统硬件设计主控制器选择系统硬件结构图时钟及复位电路指示灯及倒计时模块 倒计时模块&#xff1a;程序软件主流程框架main函数 设计报告资料清单资料下载链接 基于51单片机交通灯_紧急开关黄灯倒计时可调时间 仿真图prote…

大学程序员的养生之道

呀哈喽&#xff0c;我是结衣。 今天给大家带来的是大学程序员的养生之道&#xff01; 作为一名大学生还没有深刻的感受到未来的恐怖&#xff0c;但每当我看到这些对程序员的评价还是不禁感慨。 不要让自己的学习之路变成这样啊&#xff01;程序员的职业发展&#xff1a;某编程语…

[数据结构]HashSet与LinkedHashSet的底层原理学习心得

我们区分list和set集合的标准是三个&#xff1a;有无顺序&#xff0c;可否重复&#xff0c;有无索引。 list的答案是&#xff1a;有顺序&#xff0c;可重复&#xff0c;有索引。这也就是ArrayList和LinkedList的共性 set的答案是&#xff1a;顺序内部再区分,不可以重复&#xf…

SpringBootAdmin监控原理Actuator,自定义指标

SpringBootAdmin监控原理Actuator&#xff0c;自定义指标 文章目录 SpringBootAdmin监控原理Actuator&#xff0c;自定义指标actuator自定义info端点信息自定义Health端点信息自定义metrics端点信息端点的自定义 actuator JMX方式就是在cmd控制台输入jconsole&#xff0c;会弹出…

无代码集成航天信息:优化电商平台用户运营,提高CRM和广告推广的效能

无代码开发的集成优势 在数字化竞争愈发激烈的商业市场中&#xff0c;企业对于提高效率和优化用户运营的需求不断增长。无代码开发的集成解决方案&#xff0c;如航天信息电子发票&#xff0c;为企业提供了无需深入编程知识即可快速实现的系统对接能力。这种集成方式简化了技术…

shell编程系列(10)-使用paste拼接列

使用paste拼接列 前言使用paste拼接列拼接两个文件 结语 前言 在前面的文章中讲解了使用cut命令选择列&#xff0c;这篇文章我们介绍使用paste命令拼接列&#xff0c;其实这个命令的使用场景很有限&#xff0c;做科研的同学可能才会用到&#xff0c;但是却非常好用&#xff0c…