当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-12-13 17:02:57 375观看
导读在日常开发中,我们会使用很多工具类来提升项目开发的速度,而国内用的比较多的 Hutool 框架,就是其中之一。先来看官方对于 Hutool 的定义:Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提

在日常开发中,我们会使用很多工具类来提升项目开发的速度,而国内用的比较多的 Hutool 框架,就是其中之一。VwQ28资讯网——每日最新资讯28at.com

先来看官方对于 Hutool 的定义:VwQ28资讯网——每日最新资讯28at.com

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

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

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

Hutool 官方文档:https://doc.hutool.cn/VwQ28资讯网——每日最新资讯28at.com

1.包含模块

Hutool 包含以下模块:VwQ28资讯网——每日最新资讯28at.com

模块VwQ28资讯网——每日最新资讯28at.com

介绍VwQ28资讯网——每日最新资讯28at.com

hutool-aopVwQ28资讯网——每日最新资讯28at.com

JDK 动态代理封装,提供非 IOC 下的切面支持。VwQ28资讯网——每日最新资讯28at.com

hutool-bloomFilterVwQ28资讯网——每日最新资讯28at.com

布隆过滤,提供一些 Hash 算法的布隆过滤。VwQ28资讯网——每日最新资讯28at.com

hutool-cacheVwQ28资讯网——每日最新资讯28at.com

简单缓存实现。VwQ28资讯网——每日最新资讯28at.com

hutool-coreVwQ28资讯网——每日最新资讯28at.com

核心,包括 Bean 操作、日期、各种Util等。VwQ28资讯网——每日最新资讯28at.com

hutool-cronVwQ28资讯网——每日最新资讯28at.com

定时任务模块,提供类 Crontab 表达式的定时任务。VwQ28资讯网——每日最新资讯28at.com

hutool-cryptoVwQ28资讯网——每日最新资讯28at.com

加密解密模块,提供对称、非对称和摘要算法封装。VwQ28资讯网——每日最新资讯28at.com

hutool-dbVwQ28资讯网——每日最新资讯28at.com

JDBC 封装后的数据操作,基于 ActiveRecord思想。VwQ28资讯网——每日最新资讯28at.com

hutool-dfaVwQ28资讯网——每日最新资讯28at.com

基于 DFA 模型的多关键字查找。VwQ28资讯网——每日最新资讯28at.com

hutool-extraVwQ28资讯网——每日最新资讯28at.com

扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)。VwQ28资讯网——每日最新资讯28at.com

hutool-httpVwQ28资讯网——每日最新资讯28at.com

基于 HttpUrlConnection 的 Http 客户端封装。VwQ28资讯网——每日最新资讯28at.com

hutool-logVwQ28资讯网——每日最新资讯28at.com

自动识别日志实现的日志门面。VwQ28资讯网——每日最新资讯28at.com

hutool-scriptVwQ28资讯网——每日最新资讯28at.com

脚本执行封装,例如 Javascript。VwQ28资讯网——每日最新资讯28at.com

hutool-settingVwQ28资讯网——每日最新资讯28at.com

功能更强大的 Setting 配置文件和 Properties 封装。VwQ28资讯网——每日最新资讯28at.com

hutool-systemVwQ28资讯网——每日最新资讯28at.com

系统参数调用封装(JVM 信息等)。VwQ28资讯网——每日最新资讯28at.com

hutool-jsonVwQ28资讯网——每日最新资讯28at.com

JSON 实现。VwQ28资讯网——每日最新资讯28at.com

hutool-captchaVwQ28资讯网——每日最新资讯28at.com

图片验证码实现。VwQ28资讯网——每日最新资讯28at.com

hutool-poiVwQ28资讯网——每日最新资讯28at.com

针对 POI 中 Excel 和 Word 的封装。VwQ28资讯网——每日最新资讯28at.com

hutool-socketVwQ28资讯网——每日最新资讯28at.com

基于 Java 的 NIO 和 AIO 的 Socket 封装。VwQ28资讯网——每日最新资讯28at.com

hutool-jwtVwQ28资讯网——每日最新资讯28at.com

JSON Web Token(JWT)封装实现。VwQ28资讯网——每日最新资讯28at.com

2.引入框架

首先,在项目的 pom.xml 的 dependencies 中加入以下内容:VwQ28资讯网——每日最新资讯28at.com

<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 请求变得无比简单。VwQ28资讯网——每日最新资讯28at.com

具体使用,例如发送一个 GET 请求:VwQ28资讯网——每日最新资讯28at.com

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

发送一个 POST 请求:VwQ28资讯网——每日最新资讯28at.com

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

3.2 生成 N 位随机验证码

例如,生成手机验证码(4 位或 6 位),使用 Hutool 的这个功能就再也合适不过了,具体实现代码如下:VwQ28资讯网——每日最新资讯28at.com

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

3.3 拼音工具

Hutool 封装了拼音的门面,用于兼容以下拼音库:VwQ28资讯网——每日最新资讯28at.com

  1. TinyPinyin
  2. JPinyin
  3. Pinyin4j

和其它门面模块类似,采用 SPI 方式识别所用的库。例如你想用 Pinyin4j,只需引入 jar,Hutool 即可自动识别。VwQ28资讯网——每日最新资讯28at.com

以下为 Hutool 支持的拼音库的 pom 坐标,你可以选择任意一个引入项目中,如果引入多个,Hutool 会按照以上顺序选择第一个使用。VwQ28资讯网——每日最新资讯28at.com

TinyPinyin 依赖:VwQ28资讯网——每日最新资讯28at.com

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

JPinyin 依赖:VwQ28资讯网——每日最新资讯28at.com

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

Pinyin4j 依赖:VwQ28资讯网——每日最新资讯28at.com

<dependency>  <groupId>com.github.stuxuhai</groupId>  <artifactId>jpinyin</artifactId>  <version>1.1.8</version></dependency>

① 获取全部拼音

// 输出结果:ni haoString pinyin = PinyinUtil.getPinyin("你好", " ");

这里定义的分隔符为空格,你也可以按照需求自定义分隔符,亦或者使用 "" 代表无分隔符。VwQ28资讯网——每日最新资讯28at.com

② 获取拼音首字母

// 输出结果:h, s, d, y, gString result = PinyinUtil.getFirstLetter("H是第一个", ", ");

③ 自定义拼音库(拼音引擎)

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

3.4 计时器

Hutool 通过封装 TimeInterval 实现计时器功能,即可以计算方法或过程执行的时间。VwQ28资讯网——每日最新资讯28at.com

具体使用如下:VwQ28资讯网——每日最新资讯28at.com

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

也可以实现分组计时:VwQ28资讯网——每日最新资讯28at.com

final TimeInterval timer = new TimeInterval();// 分组 1timer.start("1");ThreadUtil.sleep(1000);// 分组 2timer.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 数字工具针对数学运算做工具性封装。VwQ28资讯网——每日最新资讯28at.com

我最喜欢使用它的保留小时和数字格式化,下面一起来看吧。VwQ28资讯网——每日最新资讯28at.com

① 保留小数

保留小数的方法主要有两种:VwQ28资讯网——每日最新资讯28at.com

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

具体实现如下。VwQ28资讯网——每日最新资讯28at.com

NumberUtil.round 方法使用:VwQ28资讯网——每日最新资讯28at.com

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

NumberUtil.roundStr 方法使用:VwQ28资讯网——每日最新资讯28at.com

double te1=123456.123456;double te2=123456.128456;Console.log(roundStr(te1,2));//结果:123456.12Console.log(roundStr(te2,2));//结果:123456.13

② 时间格式化

针对 DecimalFormat.format 进行简单封装。按照固定格式对 double 或 long 类型的数字做格式化操作,具体实现如下:VwQ28资讯网——每日最新资讯28at.com

long c = 299792458; // 光速String format = NumberUtil.decimalFormat(",###", c); // 299,792,458

格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。VwQ28资讯网——每日最新资讯28at.com

  • 0 -> 取一位整数。
  • 0.00 -> 取一位整数和两位小数。
  • 00.000 -> 取两位整数和三位小数。
  • # -> 取所有整数部分。
  • #.##% -> 以百分比方式计数,并取两位小数。
  • #.#####E0 -> 显示为科学计数法,并取五位小数。
  • ,### -> 每三位以逗号进行分隔,例如:299,792,458。
  • 光速大小为每秒,###米 -> 将格式嵌入文本。

③ 校验数字

  • NumberUtil.isNumber:是否为数字。
  • NumberUtil.isInteger:是否为整数。
  • NumberUtil.isDouble:是否为浮点数。
  • NumberUtil.isPrimes:是否为质数。

④ 随机数

  • NumberUtil.generateRandomNumber 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。
  • NumberUtil.generateBySet 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。

3.6 数据脱敏

在数据处理或清洗中,可能涉及到很多隐私信息的脱敏工作,因此Hutool针对常用的信息封装了一些脱敏方法。VwQ28资讯网——每日最新资讯28at.com

现阶段支持的脱敏数据类型包括:VwQ28资讯网——每日最新资讯28at.com

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

整体来说,所谓脱敏就是隐藏掉信息中的一部分关键信息,用*代替,自定义隐藏可以使用 StrUtil.hide 方法完成。VwQ28资讯网——每日最新资讯28at.com

我们以身份证号码为例:VwQ28资讯网——每日最新资讯28at.com

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

对于约定俗成的脱敏,我们可以不用指定隐藏位数,比如手机号:VwQ28资讯网——每日最新资讯28at.com

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

当然还有一些简单粗暴的脱敏,比如密码,只保留了位数信息:VwQ28资讯网——每日最新资讯28at.com

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

3.7 邮件发送工具

在 Java 中发送邮件主要依靠 javax.mail 包,但是由于使用比较繁琐,因此 Hutool 针对其做了封装  MailUtil,它的使用主要需要两步:VwQ28资讯网——每日最新资讯28at.com

  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 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。VwQ28资讯网——每日最新资讯28at.com

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

布隆过滤器的具体使用如下:VwQ28资讯网——每日最新资讯28at.com

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

小结

不是代码写不起,而是 Hutool 更有性价比。正如官方描述的那样,使用 Hutool 会有种甜甜的感觉,磨刀不误砍柴工,Hutool 用上之后代码嘎嘎香,快去试试吧~VwQ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-44415-0.html效率工具:Hutool 嘎嘎香,开炫了!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 手把手教你IDEA进行远程Debug调试的来龙去脉

下一篇: 12月TIOBE编程语言:PHP稳居第七位,继续前行!

标签:
  • 热门焦点
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了&ldquo;本地生活&rdquo;入口,位置较深,位于首页的&ldquo;充值中心&rdquo;内,目前主要售卖美食相关的
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的&ldquo;新电商三兄弟&rdquo;成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
Top