跳至主要內容

hutool工具包应用

holic-x...大约 6 分钟碎片化碎片化

hutool工具包应用

基本概念

Hutool定义

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

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

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

项目应用

pom.xml依赖引入

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

1.常见应用场景

【1】http请求响应

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

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

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

【2】随机验证码生成

​ 生成随机验证码

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

【3】拼音工具

​ Hutool 封装了拼音的门面,用于兼容以不同拼音库:TinyPinyin、JPinyin、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", " ");

【4】计时器

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

# 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"));

【5】数字工具

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

# 1.保留小数
NumberUtil.round 方法主要封装 BigDecimal 中的方法来保留小数,返回 BigDecimal,这个方法更加灵活,可以选择四舍五入或者全部舍弃等模式
NumberUtil.roundStr 方法主要封装 String.format 方法,舍弃方式采用四舍五入
  
double te1=123456.123456;
double te2=123456.128456;
Console.log(round(te1,4));	// 结果:123456.1235
Console.log(round(te2,4));	// 结果:123456.1285


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


# 2.时间格式化
针对 DecimalFormat.format 进行简单封装。按照固定格式对 doublelong 类型的数字做格式化操作
long c = 299792458;	// 光速
String format = NumberUtil.decimalFormat(",###", c);	// 299,792,458

格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
0 -> 取一位整数
0.00 -> 取一位整数和两位小数
00.000 -> 取两位整数和三位小数
# -> 取所有整数部分
#.##% -> 以百分比方式计数,并取两位小数
#.#####E0 -> 显示为科学计数法,并取五位小数
,### -> 每三位以逗号进行分隔,例如:299,792,458
光速大小为每秒,###米 -> 将格式嵌入文本
  
# 3.校验数字
NumberUtil.isNumber:是否为数字
NumberUtil.isInteger:是否为整数
NumberUtil.isDouble:是否为浮点数
NumberUtil.isPrimes:是否为质数

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

【6】数据脱敏

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

​ 现阶段支持的脱敏数据类型包括:用户 id、中文姓名、身份证号、座机号、手机号、地址、电子邮件、密码、中国大陆车牌,包含普通车辆、新能源车辆、银行卡

# 身份证号码
// 5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);

# 手机号
// 180****1999
DesensitizedUtil.mobilePhone("18049531999");

# 密码脱敏
// **********
DesensitizedUtil.password("1234567890");

【7】邮件发送

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

  • 添加 Java Mail 依赖(因为 MailUtil 是对它的封装)
  • 编写邮件发送代码

pom.xml依赖引入

<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);

【8】布隆过滤器

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

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

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

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

// 查找
filter.contains("abc");
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3