Hutool工具包的常用工具类的使用介绍

前言

Hutool 是一个轻量级的 Java 工具类库,提供了非常丰富的工具方法,可以大大减少开发时的重复性工作。它的目标是让 Java 开发更简单、更高效。Hutool 提供了多种常用功能,以下是一些常用工具类的使用介绍:

1. StrUtil - 字符串工具类

StrUtil 提供了大量的字符串处理方法,如字符串的空值判断、去除空格、字符串拼接等。

import cn.hutool.core.util.StrUtil;

public class StrUtilExample {
    public static void main(String[] args) {
        String str = "  Hello Hutool  ";
        
        // 去除两端空白
        String trimmed = StrUtil.trim(str);
        System.out.println(trimmed);  // "Hello Hutool"
        
        // 判断字符串是否为空
        boolean isEmpty = StrUtil.isEmpty(str);
        System.out.println(isEmpty);  // false
        
        // 判断字符串是否为空或只包含空格
        boolean isBlank = StrUtil.isBlank(str);
        System.out.println(isBlank);  // false
        
        // 拼接字符串
        String joined = StrUtil.join("-", "a", "b", "c");
        System.out.println(joined);  // "a-b-c"
    }
}

常用方法:

  • trim(String str):去掉字符串前后的空白字符。
  • isEmpty(String str):判断字符串是否为空(不包括空白字符)。
  • isBlank(String str):判断字符串是否为空或仅包含空白字符。
  • join(String separator, Object... elements):将多个字符串用指定分隔符连接。

2. CollUtil - 集合工具类

CollUtil 提供了集合相关的常用操作,如集合是否为空、集合合并、集合去重等。

import cn.hutool.core.collection.CollUtil;
import java.util.List;

public class CollUtilExample {
    public static void main(String[] args) {
        List<String> list1 = CollUtil.newArrayList("a", "b", "c");
        List<String> list2 = CollUtil.newArrayList("d", "e");
        
        // 合并集合
        List<String> combined = CollUtil.union(list1, list2);
        System.out.println(combined);  // ["a", "b", "c", "d", "e"]
        
        // 去重集合
        List<String> listWithDuplicates = CollUtil.newArrayList("a", "b", "a", "c");
        List<String> uniqueList = CollUtil.removeDuplicate(listWithDuplicates);
        System.out.println(uniqueList);  // ["a", "b", "c"]
        
        // 判断集合是否为空
        boolean isEmpty = CollUtil.isEmpty(list1);
        System.out.println(isEmpty);  // false
    }
}

常用方法:

  • union(Collection<T> coll1, Collection<T> coll2):合并两个集合。
  • removeDuplicate(List<T> list):去重列表中的重复元素。
  • isEmpty(Collection<T> coll):判断集合是否为空。

3. DateUtil - 日期工具类

DateUtil 是处理日期和时间的一个非常强大的工具类,支持各种日期格式的转换、计算、比较等操作。

import cn.hutool.core.date.DateUtil;
import java.util.Date;

public class DateUtilExample {
    public static void main(String[] args) {
        // 获取当前日期
        Date now = DateUtil.date();
        System.out.println(now);  // 输出当前日期
        
        // 格式化日期
        String formattedDate = DateUtil.format(now, "yyyy-MM-dd HH:mm:ss");
        System.out.println(formattedDate);  // 输出格式化后的日期
        
        // 解析日期字符串
        Date parsedDate = DateUtil.parse("2024-12-20 10:00:00", "yyyy-MM-dd HH:mm:ss");
        System.out.println(parsedDate);  // 输出解析后的日期
        
        // 获取当前时间戳
        long timestamp = DateUtil.current();
        System.out.println(timestamp);  // 输出当前时间戳
    }
}

常用方法:

  • date():获取当前日期。
  • format(Date date, String pattern):格式化日期。
  • parse(String dateStr, String pattern):解析日期字符串。
  • current():获取当前时间戳。

4. FileUtil - 文件工具类

FileUtil 提供了大量的文件操作方法,包括读取文件、写入文件、文件夹操作等。

import cn.hutool.core.io.FileUtil;

import java.io.File;

public class FileUtilExample {
    public static void main(String[] args) {
        // 创建文件
        File file = FileUtil.touch("test.txt");
        System.out.println("文件创建成功:" + file.exists());
        
        // 写入内容
        FileUtil.writeUtf8String("Hello Hutool", file);
        
        // 读取文件内容
        String content = FileUtil.readUtf8String(file);
        System.out.println(content);  // 输出:Hello Hutool
        
        // 删除文件
        FileUtil.del(file);
        System.out.println("文件已删除:" + !file.exists());
    }
}

常用方法:

  • touch(String path):创建一个文件,如果文件存在,则不做任何操作。
  • writeUtf8String(String content, File file):以 UTF-8 编码向文件写入字符串。
  • readUtf8String(File file):读取文件的 UTF-8 编码内容。
  • del(File file):删除文件或目录。

5. BeanUtil - Bean 操作工具类

BeanUtil 提供了对 Java Bean 的操作方法,支持对象属性的复制、转化等。

import cn.hutool.core.bean.BeanUtil;

import java.util.HashMap;
import java.util.Map;

public class BeanUtilExample {
    public static void main(String[] args) {
        // 将 Map 转换为 Bean 对象
        Map<String, Object> map = new HashMap<>();
        map.put("name", "John");
        map.put("age", 25);
        
        Person person = BeanUtil.mapToBean(map, Person.class, false);
        System.out.println(person);  // Person{name='John', age=25}
        
        // 将 Bean 对象转换为 Map
        Map<String, Object> convertedMap = BeanUtil.beanToMap(person);
        System.out.println(convertedMap);  // {name=John, age=25}


 // 创建 User 对象
        User user = new User("Alice", 30);

        // 创建 UserDTO 对象
        UserDTO userDTO = new UserDTO();

        // 使用 BeanUtil 进行属性拷贝
        BeanUtil.copyProperties(user, userDTO);

        // 输出拷贝后的 UserDTO 对象
        System.out.println(userDTO);  // 输出: UserDTO{name='Alice', age=30}
    }

    static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + '}';
        }
    }
}

常用方法:

  • mapToBean(Map<String, Object> map, Class<T> beanClass, boolean ignoreError):将 Map 转换为 Bean 对象。
  • beanToMap(Object bean):将 Bean 转换为 Map。
  • BeanUtil.copyProperties(brand, copyBrand):属性拷贝

6. RandomUtil - 随机数工具类

RandomUtil 提供了生成随机数、随机字符、随机字符串等的工具方法。

import cn.hutool.core.util.RandomUtil;

public class RandomUtilExample {
    public static void main(String[] args) {
        // 生成随机整数
        int randomInt = RandomUtil.randomInt();
        System.out.println(randomInt);
        
        // 生成指定范围的随机整数
        int randomIntInRange = RandomUtil.randomInt(1, 100);
        System.out.println(randomIntInRange);
        
        // 生成随机字符串
        String randomStr = RandomUtil.randomString(10);
        System.out.println(randomStr);
    }
}

常用方法:

  • randomInt():生成一个随机整数。
  • randomInt(int start, int end):生成指定范围内的随机整数。
  • randomString(int length):生成指定长度的随机字符串。

7. MapUtil - Map操作工具类

1. 判断 Map 是否为空

import cn.hutool.core.collection.MapUtil;
import java.util.Map;
import java.util.HashMap;

public class MapUtilExample {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        
        // 判断 Map 是否为空
        System.out.println(MapUtil.isEmpty(map));  // true
        System.out.println(MapUtil.isNotEmpty(map));  // false
        
        // 添加元素
        map.put("key", "value");
        
        System.out.println(MapUtil.isEmpty(map));  // false
        System.out.println(MapUtil.isNotEmpty(map));  // true
    }
}

2.创建一个空的 Map 或新建一个 HashMap

import cn.hutool.core.collection.MapUtil;

public class MapUtilExample {
    public static void main(String[] args) {
        // 创建一个空的 HashMap
        Map<String, String> emptyMap = MapUtil.newHashMap();
        System.out.println(emptyMap);  // 输出: {}
        
        // 创建一个带初始值的 HashMap
        Map<String, String> mapWithValues = MapUtil.newHashMap(3);
        mapWithValues.put("key1", "value1");
        mapWithValues.put("key2", "value2");
        System.out.println(mapWithValues);  // 输出: {key1=value1, key2=value2}
    }
}

3. 获取 Map 中的值,支持默认值

import cn.hutool.core.collection.MapUtil;

import java.util.Map;
import java.util.HashMap;

public class MapUtilExample {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");

        // 获取 Map 中的值,存在则返回,否则返回默认值
        String value = MapUtil.get(map, "key1", "defaultValue");
        System.out.println(value);  // 输出: value1
        
        // 获取一个不存在的键,返回默认值
        String defaultValue = MapUtil.get(map, "key2", "defaultValue");
        System.out.println(defaultValue);  // 输出: defaultValue
    }
}

4. 合并多个 Map

import cn.hutool.core.collection.MapUtil;
import java.util.Map;
import java.util.HashMap;

public class MapUtilExample {
    public static void main(String[] args) {
        Map<String, String> map1 = new HashMap<>();
        map1.put("key1", "value1");
        
        Map<String, String> map2 = new HashMap<>();
        map2.put("key2", "value2");

        // 合并两个 Map
        Map<String, String> mergedMap = MapUtil.merge(map1, map2);
        System.out.println(mergedMap);  // 输出: {key1=value1, key2=value2}
    }
}

总结

上述是一些常用的工具类,Hutool是一个小而全的Java工具类库,上述只是列举了部分,涉及到其他的使用方法可以参考官方api文档进行查询。

官网地址:

Hutool🍬一个功能丰富且易用的Java工具库,涵盖了字符串、数字、集合、编码、日期、文件、IO、加密、数据库JDBC、JSON、HTTP客户端等功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字经济下的 AR 眼镜

目录 1. &#x1f4c2; AR 眼镜发展历史 1.1 AR 眼镜相关概念 1.2 市面主流 XR 眼镜 1.3 AR 眼镜大事记 1.4 国内外 XR 眼镜 1.5 国内 AR 眼镜四小龙 2. &#x1f531; 关键技术 2.1 AR 眼镜近眼显示原理 2.2 AR 眼镜关键技术 2.3 AR 眼镜技术难点 3. &#x1f4a…

maven-resources-production:ratel-fast: java.lang.IndexOutOfBoundsException

Maven生产环境中遇到java.lang.IndexOutOfBoundsException的问题&#xff0c;尝试了重启电脑、重启IDEA等常规方法无效&#xff0c;最终通过直接重建工程解决了问题。 Rebuild Project 再启动OK

TDesign:NavBar 导航栏

NavBar 导航栏 左图&#xff0c;右标 appBar: TDNavBar(padding: EdgeInsets.only(left: 0,right: 30.w), // 重写左右内边距centerTitle:false, // 不显示标题height: 45, // 高度titleWidget: TDImage( // 左图assetUrl: assets/img/logo.png,width: 147.w,height: 41.w,),ba…

【计算机网络】lab2 Ethernet(链路层Ethernet frame结构细节)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

ansible剧本快速上手

playbook剧本介绍 是什么&#xff1a;能户长期保存&#xff0c;且能实现批量配置、部署…的文件格式&#xff1a;yaml格式。用 空格 冒号 头号 句号语法检测&#xff1a;ansible-playbook --syntax-check install-zabbix.yaml或则 -C检测取消默认任务&#xff1a;gather_facts…

【LeetCode每日一题】——434.字符串中的单词数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时空频度】八【代码实现】九【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 434.字符串中的单词数 四【题目描述】 统计字符串中的单词个…

C++ OpenGL学习笔记(1、Hello World空窗口程序)

终于抽出时间系统学习OpenGL 教程&#xff0c;同时也一步一步记录怎样利用openGL进行加速计算。 目录 1、环境准备1.1、库的下载1.2、库的选择及安装 2、OpenGL第一个项目&#xff0c;Hello World!2.1、新建hello world控制台项目2.2、配置openGL环境2.2.1 包含目录配置2.2.2 …

MySQL复制问题和解决

目录 环境介绍 一&#xff0c;主库执行delete&#xff0c;从库没有该数据 模拟故障 修复故障 二&#xff0c;主库执行insert&#xff0c;从库已存在该数据 模拟故障 故障恢复 三&#xff0c;主库执行update&#xff0c;从库没有该数据 模拟故障 故障恢复 四&#xf…

AWTK 在树莓派 pico 上的移植笔记

1. 配置文件 (awtk_config.h) pico 和 stm32f103 的配置差不多&#xff0c;虽然 pico 的内存要大不少&#xff0c;但是也不足提供一个完整的 FrameBuffer&#xff0c;所以只能使用片段 LCD。 我们在 awtk-stm32f103 的配置 基础稍作修改即可。 /* 使用片段 LCD */#define FRA…

构建MacOS应用小白教程(打包 签名 公证 上架)

打包 在package.json中&#xff0c;dependencies会被打进 Electron 应用的包里&#xff0c;而devDependencies则不会&#xff0c;所以必要的依赖需要放到dependencies中。files中定义自己需要被打进 Electron 包里的文件。以下是一个完整的 mac electron-builder的配置文件。 …

flink sink doris

接上文&#xff1a;一文说清flink从编码到部署上线 网上关于flink sink drois的例子较多&#xff0c;大部分不太全面&#xff0c;故本文详细说明&#xff0c;且提供完整代码。 1.添加依赖 <!--doris cdc--><!-- 参考&#xff1a;"https://doris.apache.org/zh-C…

GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录

文章目录 论文背景Spectre-PHT&#xff08;Transient Execution &#xff09;Concurrency BugsSRC/SCUAF和实验条件 流程Creating an Unbounded UAF WindowCrafting Speculative Race ConditionsExploiting Speculative Race Conditions poc修复flush and reload 论文 https:/…

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…

国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案

随着科技高速发展&#xff0c;视频信号经过数字压缩&#xff0c;通过互联网宽带或者移动4G网络传递&#xff0c;可实现远程视频监控功能。将这一功能运用于施工现场安全管理&#xff0c;势必会大大提高管理效率&#xff0c;提升监管层次。而这些&#xff0c;通过Liveweb监控系统…

AS-REP Roasting离线爆破攻击

针对一个域内用户&#xff0c;其账户选项有个设置叫作 “不要求 kerberos 预身份验证”&#xff0c;它默认是关闭的。 当 “不要求 kerberos 预身份验证” 选项被勾选&#xff0c;会出现以下效果&#xff1a; as-req 报文中不需要添加用户 hash 加密的时间戳&#xff0c;自动返…

python中的局部变量、全局变量问题的思考(对比于c语言)

今天在运行python时遇到了局部变量和全局变量的问题&#xff0c;令我很迷惑。 首先&#xff0c;我在学习python之前先学习了c语言&#xff0c;所以c语言的一些东西影响了我对这个问题的思考。 在c语言中 局部变量和全局变量的区别就在于作用域的范围大小。在c语言中&#xf…

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器&#xff08;BNAS&#xff09; 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…

文件,IO流

目录 一 java 1. IO流 1&#xff09;输入输出&#xff08;以程序的视角判断 &#xff09; 1.1 IO流的分类 1&#xff09;字符流效率高于字节流 1.2 流和文件的关系 2. inputstream--字节输入流 2.1 fileinputstream 2.1.1常用方法&#xff1a; 1&#xff09;单个字符…

pymssql-2.1.4.dev5-cp37-cp37m-win_amd64.whl 安装

pip install pymssql 安装pymssql出现下面的问题 error: Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools 因为要使用python连接sqlserver数据库&#xff0c;需要pymssq…

vue中验证码的实现方式

在写登录页的时候有的系统会让你也进行一下验证码绘制&#xff0c;那么验证码如何实现的呢&#xff1f;我在写登录页的时候通过将登录框&#xff0c;验证码分开页面来写&#xff0c;最后将它们变成标签来导入到我的样式页面中&#xff0c;这样写不仅方便&#xff0c;更容易修改…