效率工具——Hutool 嘎嘎香,被秀到了!

HuTool_字符串工具-StrUtil 这个工具的用处类似于Apache Commons Lang中的StringUtil。 阅读详情

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

先来看官方对于Hutool的定义:

Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。

Hutool 中的工具方法来自每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool 是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的 bug。

Hutool官方文档:doc.hutool.cn/

1.包含模块

Hutool 包含以下模块:

模块介绍
hutool-aopJDK 动态代理封装,提供非 IOC 下的切面支持。
hutool-bloomFilter布隆过滤,提供一些 Hash 算法的布隆过滤。
hutool-cache简单缓存实现。
hutool-core核心,包括 Bean 操作、日期、各种Util等。
hutool-cron定时任务模块,提供类 Crontab 表达式的定时任务。
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装。
hutool-dbJDBC 封装后的数据操作,基于 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-jsonJSON 实现。
hutool-captcha图片验证码实现。
hutool-poi针对 POI 中 Excel 和 Word 的封装。
hutool-socket基于 Java 的 NIO 和 AIO 的 Socket 封装。
hutool-jwtJSON Web Token(JWT)封装实现。

2.引入框架

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

<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 请求:

// GET请求
String content = HttpUtil.get(url);

发送一个 POST 请求:

// POST 请求
HashMap<String, Object> param = new HashMap<>();
paramMap.put("city", "西安");
String result1 = HttpUtil.post("www.javacn.site", param);

3.2 生成 N 位随机验证码

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

// 生成 4 位随机验证码
String verificationCode = RandomUtil.randomStringUpper(4);

3.3 拼音工具

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

  1. TinyPinyin
  2. JPinyin
  3. Pinyin4j

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

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

TinyPinyin 依赖:

<dependency>
  <groupId>io.github.biezhi</groupId>
  <artifactId>TinyPinyin</artifactId>
  <version>2.0.3.RELEASE</version>
</dependency>

JPinyin 依赖:

<dependency>
  <groupId>com.belerweb</groupId>
  <artifactId>pinyin4j</artifactId>
  <version>2.5.1</version>
</dependency>

Pinyin4j 依赖:

<dependency>
  <groupId>com.github.stuxuhai</groupId>
  <artifactId>jpinyin</artifactId>
  <version>1.1.8</version>
</dependency>
① 获取全部拼音
// 输出结果:ni hao
String pinyin = PinyinUtil.getPinyin("你好", " "); 

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

② 获取拼音首字母
// 输出结果:h, s, d, y, g
String result = PinyinUtil.getFirstLetter("H是第一个", ", "); 
③ 自定义拼音库(拼音引擎)
Pinyin4jEngine engine = new Pinyin4jEngine();
// 输出结果:ni hao h
String pinyin = engine.getPinyin("你好h", " ");

3.4 计时器

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

具体使用如下:

TimeInterval timer = DateUtil.timer();
// todo:执行具体业务
timer.interval();		// 花费毫秒数
timer.intervalRestart();// 返回花费时间,并重置开始时间
timer.intervalMinute(); // 花费分钟数

也可以实现分组计时:

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 方法使用:

double te1=123456.123456;
double te2=123456.128456;
Console.log(round(te1,4));	// 结果:123456.1235
Console.log(round(te2,4));	// 结果:123456.1285

NumberUtil.roundStr 方法使用:

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 类型的数字做格式化操作,具体实现如下:

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 方法完成。

我们以身份证号码为例:

// 5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);

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

// 180****1999
DesensitizedUtil.mobilePhone("18049531999");

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

// **********
DesensitizedUtil.password("1234567890");

3.7 邮件发送工具

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

  1. 添加 Java Mail 依赖(因为 MailUtil 是对它的封装)。
  2. 编写邮件发送代码。
① 添加依赖
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>
② 编写发送代码
// 发送普通文本邮件,最后一个参数可选是否添加多个附件
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,则被检元素很可能在。这就是布隆过滤器的基本思想。参考:大数据量下的集合过滤——Bloom Filter

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

// 初始化
BitMapBloomFilter filter = new BitMapBloomFilter(10);
filter.add("123");
filter.add("abc");
filter.add("ddd");

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

小结

不是代码写不起,而是 Hutool 更有性价比。正如官方描述的那样,使用 Hutool 会有种甜甜的感觉,磨刀不误砍柴工,Hutool 用上之后代码嘎嘎香,快去试试吧~

工具篇之Hutool Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。 阅读详情

相关推荐

Hutool 工具库

Hutool 真心是一个不错的国产 Java 工具类库,功能全面,对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行了封装,开箱即用!官方是这样介绍 Hutool 的:Hutool 介绍Hutool 包含的组件以及组件提供的功能如下表所示:Hutool 包含的组件你可以根据项目需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。不过,还是不建议引入所有模块,因为绝大部分功能项目可能都用不上,建议只引入你需要的模块。

2402_86519061的博客 1550

java判断字符串是否是数字

第一种:通过StringUilts工具包进行判断 private static boolean isNumber(String str) { return StringUtils.isNumeric(str); } 第二种:通过正则表达式进行判断 // 通过 -?[0-9]+(\\\\.[0-9]+)? 进行匹配是否为数字 private static Pattern pattern = Pattern.compile("-?[0-9]+(\\\\.[0-

当我谈编程时我谈些什么 2917

不会吧?现在还有人不知道 Hutool 吗?一起看看 Hutool 源码

前言: 本文是死磕 Hutool 源码系列开篇, 主要叙述一下为什么要阅读 Hutool源码,以及阅读 Hutool源码都有哪些好处。不知道什么是 Hutool?或者说看到「源码」两个字之后你“抖一抖” 内容有点长!需要点耐心哦! 这里还整理了今年面试的各种总结:包含了:spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结,下图是部分截图,需要的话点这里点这里,暗号优快云。 这是hutool作者路小磊讲解的hutool源码解读:点击观看 什么是 Hutool? 一个专

豆汁 6207

Java中判断字符串是否为数字的五种方法

//方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i&gt;=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } retu...

小诸葛的博客 2088

SAP FICO会计凭证过账接口

-------------------------------------增加职能范围-ZHANGZG-2022.09.07 注释掉-2022.09.20。CONCATENATE '总账' ls_doc_item-hkont '要求输入成本对象值!*-------------------------------------增加职能范围-ZHANGZG-2022.09.07。*-------------------------------------增加职能范围-ZHANGZG-2022.09.07。

dingqing86的专栏 1078

机器学习模型系列:随机森林的原理和示例介绍

让我们总结一下与其他监督式机器学习模型相比,随机森林的优缺点。优点在许多真实数据集上已知能提供高度准确的模型。通过结合多个决策树的预测,可以捕捉数据集中的复杂交互和模式。通过自动选择相关特征,可以有效处理高维数据集。与单个决策树相比,不容易过拟合。自助采样和每个节点的随机特征选择有助于减少过拟合并改善泛化能力。可以处理包括数值和分类特征在内的异构数据类型。可以处理缺失值而不需要填充。提供特征重要性的度量。集成中的树可以并行训练,因为每个决策树可以独立构建。模型的泛化误差具有理论上的界限。

数智笔记 1万+

hutool工具常用方法总结(一)

hutool常用方法总结(一)

weixin_70221917的博客 7260

用ADS搞定CGH40010F的宽带连续F类功放:从阻抗计算到版图仿真的保姆级流程

本文详细介绍了使用ADS设计CGH40010F宽带连续F类功放的全流程,从阻抗计算到版图仿真。通过分析器件特性和理论基础,提供谐波阻抗匹配和版图协同验证的实用技巧,帮助射频工程师高效完成高效率功放设计。重点关注宽带连续F类功放的设计难点和调试方法,提升设计成功率。

weixin_29189377的博客 373

java判断字符串是否为数字,兼容小数,正负数

最近业务需求需要判断前端传过来的字符串是否为数字,要求兼容小数的形式;第一时间想到apache.commons.lang3.StringUtils.isNumeric();测试后发现此方法不支持小数形式; 后摸索发现 cn.hutool.core.util.NumberUtil.isNumber()可支持; 且该方法还支持正负数形式; 百度了一圈没有发现合适的,那就自己记录一下吧。 ...

weixin_52935673的博客 1549

【Halcon-1D测量】measure_pairs 函数功能(用于提取垂直于矩形/环形弧主轴的直边对)

HALCON算子measure_pairs是1D测量模块的基础工具,专用于提取垂直于矩形/环形弧主轴的直边对。该算子通过振幅阈值和灰度过渡规则(如positive/negative)进行边对分组,支持_strongest后缀选择最强边缘避免误配对。输出包含边缘坐标、振幅及内外间距(IntraDistance/InterDistance)。关键限制包括仅适用于直边、Sigma需≤0.5×测量长度,且忽略图像域。相比模糊版本算子,它更适用于边缘清晰的简单场景(如电子元件间距测量)。典型应用需配合gen_meas

weixin_45590420的博客 303

Qt/C++音视频开发1-vlc解码播放

一、前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+vlc来做播放器,提供的接口还是非常友好的,而且门类特别多,想要获取媒体文件的各种信息比如宽高,设置宽高比等,直接调用接口函数传入参数就能设置。 所有用vlc做视频监控解码的人都会遇到一个问题,那就是鼠标事件被接管拦截了,不能识别鼠标事件,比如双击最大化等,这就很憋屈了,明明很好用的一个东西,怎么突然之间鼠标事件

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 4937

效率工具:Hutool 嘎嘎香,被秀到了!

/ 输出结果:ni hao hString pinyin = engine.getPinyin("你好h", " ");

qq_66627105的博客 1044

rk3568 修改开机动画

bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间。

weixin_35723192的博客 2727

效率工具:Hutool 嘎嘎香,被秀到了

/ 输出结果:ni hao hString pinyin = engine.getPinyin("你好h", " ");

2401_89230798的博客 1095

传感器校准与标定:传感器的灵敏度校准_(11).常见传感器的灵敏度校准方法

线性校准:适用于传感器输出与输入之间存在线性关系的情况。通过收集数据并使用最小二乘法拟合线性方程,可以确定斜率和截距,从而实现校准。非线性校准:适用于传感器输出与输入之间存在非线性关系的情况。通过收集数据并使用非线性拟合方法(如最小二乘法),可以确定多项式或其他非线性方程的参数,从而实现校准。温度补偿校准:适用于传感器在不同温度下输出特性变化的情况。通过收集不同温度下的数据并使用温度补偿方程,可以提高传感器在不同温度下的测量精度。其他校准方法。

2401_87715305的博客 915

卫星遥感影像处理:地物分类与变化检测

卫星遥感影像处理:地物分类与变化检测​ ,人工智能,计算机视觉,大模型,AI,卫星遥感技术通过搭载在卫星上的传感器获取地球表面的电磁波信息,为地物分类与变化检测提供了宏观、动态的观测数据。随着高分辨率遥感卫星(如高分系列、哨兵系列)的发展,遥感影像的空间分辨率、光谱分辨率和时间分辨率不断提升,为精准地物识别和动态变化监测奠定了基础。地物分类旨在将遥感影像中的像元按地表覆盖类型(如植被、水体、建筑、农田等)进行分类,而变化检测则通过对比不同时期的影像,识别地表覆盖的变化区域(如城市扩张、森林砍伐、土地退化等)

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

效率工具:Hutool 嘎嘎香,开炫了!

/ 输出结果:ni hao hString pinyin = engine.getPinyin("你好h", " ");

程序员高级码农的博客 1341

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

效率工具:Hutool 嘎嘎香

Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。 Hutool 中的工具方法来自每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

共同进步,共同学习。 991

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Hutool工具

简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。 Hutool

技术老鸟 9万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Hutool这么好用的工具确定不用吗?

j3_liuliang 最近看到一个超级奈斯的Java工具包Hutool,不用不知道一用是真香啊!那下面我们就简单的了解一下它把! 一、说在前面的话 所有的工具都是为了更好的开发,这没意见吧! 如果一个工具使用了,不能给你带来便捷,高效,简洁那我可以说这个工具是一个失败的,或者可以说它不能称之为一个工具; 从开始学习Java时,我们都学习过非常多的工具,有Java基础时我们学IO那块的IO工具包commons-io它是专门为java中的IO流操作而准备的,把常用的操作都封装了起来,我们只要直接用就..

技术分享、唠嗑水文、如有不周、还望海涵 3万+

Hutool性能优化:提升工具使用效率

本文介绍了Hutool工具库的性能优化技巧,重点讲解了缓存机制、批量操作、工具类方法选择和资源释放等优化方法。通过具体代码示例展示了如何使用Hutool的TimedCache提高重复计算效率、利用Db类实现批量数据库操作、采用StrBuilder优化字符串拼接性能,以及及时关闭输入流防止资源泄漏。这些优化方法能显著提升程序运行效率,减少资源占用,解决Hutool在处理大数据时的性能瓶颈问题。文章还提供了相关专栏导航,帮助开发者系统学习Hutool的使用和源码分析。

fykam的博客 1859

好用的Java工具类库—— Hutool

好用的Java工具类库—— Hutool

Javaの甘乃迪的博客 3万+

Java工具类Hutool使用

Java工具类Hutool使用

吴名氏的博客 11万+
上一篇: Stream流式编程,让代码变优雅
下一篇: POI 导出Excel 并且根据内容设置列宽自适应
默 唁
博客等级 码龄7年 77粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值