前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hutool该怎么用?

Hutool该怎么用?

作者头像
程序猿川子
发布于 2024-05-21 05:37:44
发布于 2024-05-21 05:37:44
31900
代码可运行
举报
运行总次数:0
代码可运行

在日常开发中,我们会使用很多工具类来提升项目开发的速度,而国内用的比较多的 Hutool 框架,就是其中之一。

1.包含模块

Hutool 包含以下模块:

模块

介绍

hutool-aop

JDK 动态代理封装,提供非 IOC 下的切面支持。

hutool-bloomFilter

布隆过滤,提供一些 Hash 算法的布隆过滤。

hutool-cache

简单缓存实现。

hutool-core

核心,包括 Bean 操作、日期、各种Util等。

hutool-cron

定时任务模块,提供类 Crontab 表达式的定时任务。

hutool-crypto

加密解密模块,提供对称、非对称和摘要算法封装。

hutool-db

JDBC 封装后的数据操作,基于 ActiveRecord思想。

hutool-dfa

基于 DFA 模型的多关键字查找。

hutool-extra

扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)。

hutool-http

基于 HttpUrlConnection 的 Http 客户端封装。

hutool-log

自动识别日志实现的日志门面。

hutool-script

脚本执行封装,例如 Javascript。

hutool-setting

功能更强大的 Setting 配置文件和 Properties 封装。

hutool-system

系统参数调用封装(JVM 信息等)。

hutool-json

JSON 实现。

hutool-captcha

图片验证码实现。

hutool-poi

针对 POI 中 Excel 和 Word 的封装。

hutool-socket

基于 Java 的 NIO 和 AIO 的 Socket 封装。

hutool-jwt

JSON Web Token(JWT)封装实现。

2.引入框架

首先,在项目的 pom.xml 的 dependencies 中加入以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xml复制代码<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

3.常见使用场景

3.1 HTTP 请求类

Java 中,Apache 的 HttpClient 用的比较多,但是由于此包较为庞大,API 又比较难用,因此并不适用很多场景,而 Hutool 的 Hutool-http 针对 JDK 的 HttpUrlConnection 做一层封装,简化了 HTTPS 请求、文件上传、Cookie 记忆等操作,使 Http 请求变得无比简单。

具体使用,例如发送一个 GET 请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// GET请求
String content = HttpUtil.get(url);

发送一个 POST 请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// POST 请求
HashMap<String, Object> param = new HashMap<>();
paramMap.put("city", "西安");
String result1 = HttpUtil.post("www.javacn.site", param);

3.2 生成 N 位随机验证码

例如,生成手机验证码(4 位或 6 位),使用 Hutool 的这个功能就再也合适不过了,具体实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// 生成 4 位随机验证码
String verificationCode = RandomUtil.randomStringUpper(4);

3.3 拼音工具

Hutool 封装了拼音的门面,用于兼容以下拼音库:

  1. TinyPinyin
  2. JPinyin
  3. Pinyin4j

和其它门面模块类似,采用 SPI 方式识别所用的库。例如你想用 Pinyin4j,只需引入 jar,Hutool 即可自动识别。

以下为 Hutool 支持的拼音库的 pom 坐标,你可以选择任意一个引入项目中,如果引入多个,Hutool 会按照以上顺序选择第一个使用。

TinyPinyin 依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xml复制代码<dependency>
  <groupId>io.github.biezhi</groupId>
  <artifactId>TinyPinyin</artifactId>
  <version>2.0.3.RELEASE</version>
</dependency>

JPinyin 依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xml复制代码<dependency>
  <groupId>com.belerweb</groupId>
  <artifactId>pinyin4j</artifactId>
  <version>2.5.1</version>
</dependency>

Pinyin4j 依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xml复制代码<dependency>
  <groupId>com.github.stuxuhai</groupId>
  <artifactId>jpinyin</artifactId>
  <version>1.1.8</version>
</dependency>
① 获取全部拼音
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// 输出结果:ni hao
String pinyin = PinyinUtil.getPinyin("你好", " "); 

这里定义的分隔符为空格,你也可以按照需求自定义分隔符,亦或者使用 "" 代表无分隔符。

② 获取拼音首字母
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// 输出结果:h, s, d, y, g
String result = PinyinUtil.getFirstLetter("H是第一个", ", "); 
③ 自定义拼音库(拼音引擎)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码Pinyin4jEngine engine = new Pinyin4jEngine();
// 输出结果:ni hao h
String pinyin = engine.getPinyin("你好h", " ");

3.4 计时器

Hutool 通过封装 TimeInterval 实现计时器功能,即可以计算方法或过程执行的时间。

具体使用如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码TimeInterval timer = DateUtil.timer();
// todo:执行具体业务
timer.interval();		// 花费毫秒数
timer.intervalRestart();// 返回花费时间,并重置开始时间
timer.intervalMinute(); // 花费分钟数

也可以实现分组计时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码final TimeInterval timer = new TimeInterval();
// 分组 1
timer.start("1");
ThreadUtil.sleep(1000);
// 分组 2
timer.start("2");
ThreadUtil.sleep(2000);
// 打印时间
Console.log("Timer 1 took {} ms", timer.intervalMs("1"));
Console.log("Timer 2 took {} ms", timer.intervalMs("2"));

3.5 数字工具

NumberUtil 数字工具针对数学运算做工具性封装。

我最喜欢使用它的保留小时和数字格式化,下面一起来看吧。

① 保留小数

保留小数的方法主要有两种:

  • NumberUtil.round 方法主要封装 BigDecimal 中的方法来保留小数,返回 BigDecimal,这个方法更加灵活,可以选择四舍五入或者全部舍弃等模式。
  • NumberUtil.roundStr 方法主要封装 String.format 方法,舍弃方式采用四舍五入。

具体实现如下。

NumberUtil.round 方法使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码double te1=123456.123456;
double te2=123456.128456;
Console.log(round(te1,4));	// 结果:123456.1235
Console.log(round(te2,4));	// 结果:123456.1285

NumberUtil.roundStr 方法使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arduino复制代码double te1=123456.123456;
double te2=123456.128456;
Console.log(roundStr(te1,2));//结果:123456.12
Console.log(roundStr(te2,2));//结果:123456.13
② 时间格式化

针对 DecimalFormat.format 进行简单封装。按照固定格式对 double 或 long 类型的数字做格式化操作,具体实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码long c = 299792458;	// 光速
String format = NumberUtil.decimalFormat(",###", c);	// 299,792,458

格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。

  • 0 -> 取一位整数。
  • 0.00 -> 取一位整数和两位小数。
  • 00.000 -> 取两位整数和三位小数。
  • # -> 取所有整数部分。
  • #.##% -> 以百分比方式计数,并取两位小数。
  • #.#####E0 -> 显示为科学计数法,并取五位小数。
  • ,### -> 每三位以逗号进行分隔,例如:299,792,458。
  • 光速大小为每秒,###米 -> 将格式嵌入文本。
③ 校验数字
  • NumberUtil.isNumber:是否为数字。
  • NumberUtil.isInteger:是否为整数。
  • NumberUtil.isDouble:是否为浮点数。
  • NumberUtil.isPrimes:是否为质数。
④ 随机数
  • NumberUtil.generateRandomNumber 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。
  • NumberUtil.generateBySet 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。

3.6 数据脱敏

在数据处理或清洗中,可能涉及到很多隐私信息的脱敏工作,因此Hutool针对常用的信息封装了一些脱敏方法。

现阶段支持的脱敏数据类型包括:

  1. 用户 id
  2. 中文姓名
  3. 身份证号
  4. 座机号
  5. 手机号
  6. 地址
  7. 电子邮件
  8. 密码
  9. 中国大陆车牌,包含普通车辆、新能源车辆
  10. 银行卡

整体来说,所谓脱敏就是隐藏掉信息中的一部分关键信息,用*代替,自定义隐藏可以使用 StrUtil.hide 方法完成。

我们以身份证号码为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// 5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);

对于约定俗成的脱敏,我们可以不用指定隐藏位数,比如手机号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arduino复制代码// 180****1999
DesensitizedUtil.mobilePhone("18049531999");

当然还有一些简单粗暴的脱敏,比如密码,只保留了位数信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// **********
DesensitizedUtil.password("1234567890");

3.7 邮件发送工具

在 Java 中发送邮件主要依靠 javax.mail 包,但是由于使用比较繁琐,因此 Hutool 针对其做了封装 MailUtil,它的使用主要需要两步:

  1. 添加 Java Mail 依赖(因为 MailUtil 是对它的封装)。
  2. 编写邮件发送代码。
① 添加依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xml复制代码<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>
② 编写发送代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// 发送普通文本邮件,最后一个参数可选是否添加多个附件
MailUtil.send("hutool@foxmail.com", "测试", "邮件来自磊哥测试", false);

// 发送 HTML 格式的邮件并附带附件,最后一个参数可选是否添加多个附件:
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自磊哥测试</h1>", true, FileUtil.file("d:/aaa.xml"));

// 群发邮件,可选 HTML 或普通文本,可选多个附件:
ArrayList<String> tos = CollUtil.newArrayList( 
    "person1@bbb.com", 
    "person2@bbb.com", 
    "person3@bbb.com", 
    "person4@bbb.com"); 
MailUtil.send(tos, "测试", "邮件来自磊哥群发测试", false);

3.8 布隆过滤器

布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

布隆过滤器的原理是,当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个位数组中的 K 个点,把它们置为 1。检索时,我们只要看看这些点是不是都是 1 就(大约)知道集合中有没有它了:如果这些点有任何一个 0,则被检元素一定不在;如果都是 1,则被检元素很可能在。这就是布隆过滤器的基本思想。参考:www.cnblogs.com/z941030/p/9…

布隆过滤器的具体使用如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java复制代码// 初始化
BitMapBloomFilter filter = new BitMapBloomFilter(10);
filter.add("123");
filter.add("abc");
filter.add("ddd");

// 查找
filter.contains("abc")

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
IntelliJ IDEA 修改内存大小,使得idea运行更流畅。
idea有个配置文件,可以设置内存大小的,就跟咱的jvm的内存里面的堆大小,栈大小等等,可以设置的,而且设置了之后,你这个的性能就会得到提升。具体看下面怎么修改。
全栈程序员站长
2022/11/17
4.8K0
IntelliJ IDEA 修改内存大小,使得idea运行更流畅。
Malformed argument has embedded quote: -Djava.endorsed.dirs=\"\"
之前一直好用,昨天在idea中安装:QAPlug插件,今天早晨到单位启动工程时报错,执行这两种操作都挂了
小码匠
2022/06/16
8400
Malformed argument has embedded quote: -Djava.endorsed.dirs=\"\"
【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
使用 IntelliJ IDEA 开发 Java 程序时 , 会遇到以下中文乱码问题 :
韩曙亮
2023/03/27
4.5K0
【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
【整理】IDEA优化措施
Lombok特性支持插件,目前的项目基本上用到了Lombok依赖,使用注解标注,类似语法糖,可以大大简化代码
全栈程序员站长
2022/08/31
4710
【整理】IDEA优化措施
IDEA 2022最新版 基于 JVM极致优化 IDEA 启动速度
相信做 Java 开发的同学,对 IDEA 这个工具应该都不陌生,即使不使用 IDEA 做开发,那么对 Eclipse 这个工具应该也不会陌生,如果这两个都不用的同学,我就想弱弱问一句,您不会是在使用记事本吧?
猫头虎
2024/04/08
5740
IDEA 2022最新版 基于 JVM极致优化 IDEA 启动速度
IDEA优化内存配置,可提高启动和运行速度(亲测有效)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143769.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
11.9K0
IDEA优化内存配置,可提高启动和运行速度(亲测有效)「建议收藏」
解决Ubuntu IDEA 不能输入中文
找了很多种方法,个大家列举以下,博主是最后一个方法解决的。 1. 在IDEA的bin目录下的idea.sh文件的前面加上 Fcitx 输入法: export XIM="fcitx" export XIM_PROGRAM="fcitx" export XMODIFIERS="@im=fcitx" export GTK_IM_MODULE="fcitx" export QT_IM_MODULE="fcitx" Ibus输入法: export XIM="ibus" export XIM_PROGRAM="ibus
风骨散人Chiam
2022/01/06
4.9K0
idea卡顿且报错:UI was frozen for xxxxx ms问题解决
idea 启动并且点击某个菜单之后一点反应也没有,点击关闭也关闭不掉,查看日志报错如下:
zeekling
2022/07/16
9300
linux idea 启动慢、运行慢
或者在 /home/zeekling/.config/JetBrains/IdeaIC2023.1下面找到 idea64.vmoptions文件。写入下面内容:
zeekling
2023/10/17
5260
IDEA启动项目很慢解决方案
2个最重要的必须改Xmx与Xms ,修改你的IDEA内存参数:idea64.exe.vmoptions,把它们改的大一点,并且一样大。
框架师
2021/03/04
9.3K0
解决Ubuntu 2022 IDEA 不能输入中文
检查系统语言设置: 确保您的Ubuntu系统的语言设置正确。您可以前往"Settings"(设置) > “Region & Language”(地区与语言),确保语言和输入源设置正确。
猫头虎
2024/04/07
6670
Intellij IDEA 内存优化
idea 默认的内存配置会导致idea启动缓慢,运行时很卡,查了很多资料后做了一些优化。 自己的开发机内存8G,需要自定义的同学可以重点关注Xms 和 Xmx 两个参数
大数据工程师-公子
2019/03/14
9680
Android Studio 无法打开(MAC环境下)
记录一次工作中遇到的坑: 今天升级了Android studio 3.5 版本, 正常升级后安装一切正常,接下来修改Android Studio内存大小来提高工作效率。 这次没有和以往一样直接修改 包内容/Contents/bin/studio.vmoptions 中的值, 通过Studio 中的 Help/ Edit Custom VM Options... 来修改为如下值
艳龙
2022/05/13
4.4K0
JetBrains IntelliJ IDEA 优化教程[通俗易懂]
JetBrains IntelliJ IDEA 分为两个版本:旗舰版(Ultimate)和社区版(Community)。旗舰版收费(30天免费使用时间,功能齐全);社区版(永久免费,功能简陋)。
全栈程序员站长
2022/07/31
1.2K0
JetBrains IntelliJ IDEA 优化教程[通俗易懂]
intellij idea安装步骤2019.3_intellij idea安装教程
IDEA(全称:IntelliJ IDEA)是 JetBrains 公司的产品,IntelliJ IDEA 在业界被公认为最好用的 Java 集成开发工具,结合智能编码辅助与符合人体工程学的设计,让开发不仅高效,更成为一种享受。
全栈程序员站长
2022/11/10
8450
intellij idea安装步骤2019.3_intellij idea安装教程
解决idea的控制台输出Tomcat日志乱码问题「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
8K0
解决idea的控制台输出Tomcat日志乱码问题「建议收藏」
IntelliJ IDEA内存优化最佳实践
【编者按】本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响。
九州暮云
2019/08/21
1.4K0
IntelliJ IDEA内存优化最佳实践
IntelliJ IDEA JDK 8 性能调优
IntelliJ IDEA 问题描述问题原因解决方法调优后观察为什么要选择用户`idea.vmoptions`文件
芋道源码
2018/12/19
1.5K0
深入理解JVM - 分代的基本概念
本次讲述jvm分代模型的基础概念,这个专栏会由浅入深的不断构建起来,循序渐进,和上一篇一样,是非常基础的内容
阿东
2021/08/16
4720
深入理解JVM - 分代的基本概念
使用 JDK 自带工具进行 JVM 诊断调优实战
最近参加面试多次被面试官问到JVM调 优方面的问题,即时自己面试前也重点复习了这一块的面试题,但是发现还是回答地不太好,浪费了好多次面试机会,真是让自己很抓狂。归根结底是自己以前一直只注重业务,而忽略了JVM调优这一块,对JVM这一块的实践太少了。这几天自己也重点观看了马士兵老师的JVM调优视频课, 看完之后自己也在本机和腾讯云服务器上进行了一番实践,感觉还是很有收获的。
用户3587585
2023/12/18
8510
使用 JDK 自带工具进行  JVM 诊断调优实战
推荐阅读
相关推荐
IntelliJ IDEA 修改内存大小,使得idea运行更流畅。
更多 >
目录
  • 1.包含模块
  • 2.引入框架
  • 3.常见使用场景
    • 3.1 HTTP 请求类
    • 3.2 生成 N 位随机验证码
    • 3.3 拼音工具
      • ① 获取全部拼音
      • ② 获取拼音首字母
      • ③ 自定义拼音库(拼音引擎)
    • 3.4 计时器
    • 3.5 数字工具
      • ① 保留小数
      • ② 时间格式化
      • ③ 校验数字
      • ④ 随机数
    • 3.6 数据脱敏
    • 3.7 邮件发送工具
      • ① 添加依赖
      • ② 编写发送代码
    • 3.8 布隆过滤器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档