专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
芋道源码  ·  如何应对消息堆积? ·  59 分钟前  
芋道源码  ·  Cloudflare ... ·  59 分钟前  
芋道源码  ·  Spring ... ·  18 小时前  
芋道源码  ·  为了DDD 熬夜撸了一套 IDEA 插件) ·  18 小时前  
芋道源码  ·  Hutool中的这些工具类,太实用了! ·  18 小时前  
51好读  ›  专栏  ›  芋道源码

Hutool中的这些工具类,太实用了!

芋道源码  · 公众号  · Java  · 2025-03-19 22:05

正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本

来源:苏三说技术


前言

今天给大家介绍一个能够帮助大家提升开发效率的开源工具包: hutool

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

Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:

  • 方法优先于对象
  • 自动识别优于用户定义
  • 便捷性与灵活性并存
  • 适配与兼容
  • 可选依赖原则
  • 无侵入原则

Hutool是一个Java工具包类库,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,可以帮助我们提升开发效率。

想要使用Hutool的功能,必须要先引入它的依赖,在项目的pom.xml文件中引入:

<dependency>
    <groupId>cn.hutoolgroupId>
    <artifactId>hutool-allartifactId>
    <version>5.8.26version>
dependency>

即可引入Hutool包的相关依赖。

接下来,我们一起看看Hutool包含了哪些强大的功能。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

1 Convert

在Java开发中我们要面对各种各样的类型转换问题,比如:数组转换成字符串,日期转换成字符串等。

我们需要手写许多代码,或者专门处理异常,比较麻烦。

而Hutool包专门提供了Convert类,我们使用它做类型转换,使用起来非常方便。

数字转换为字符串:

int a = 1;
//aStr为"1"
String aStr = Convert.toStr(a);

转换为指定类型数组:

long[] b = {1,2,3,4,5};
//bStr为:"[1, 2, 3, 4, 5]"
String bStr = Convert.toStr(b);

转换为指定类型数组:

String[] b = { "1"




    
"2""3""4" };
//结果为Integer数组
Integer[] intArray = Convert.toIntArray(b);

long[] c = {1,2,3,4,5};
//结果为Integer数组
Integer[] intArray2 = Convert.toIntArray(c);

转换为日期对象:

String a = "2017-05-06";
Date value = Convert.toDate(a);

转换为集合

Object[] a = {"a""你""好"""1};
List> list = Convert.convert(List.classa);
//从4.1.11开始可以这么用
List> list = Convert.toList(a);

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

2 DateUtil

Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂。

通常情况下,我们需要使用SimpleDateFormat类,做时间和字符串类型的转换。

其实Hutool包专门提供了DateUtil类,给我们做时间和日期类型转换的。

2.1 Date和Calendar相互转换

//当前时间
Date date = DateUtil.date();
//当前时间
Date date2 = DateUtil.date(Calendar.getInstance());

2.2 字符串转日期

将字符串转换成Date类型:

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);

自定义时间格式做类型转换:

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");

2.3 格式化日期输出

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);

//结果 2017/03/01
String format = DateUtil.format(date, "yyyy/MM/dd");

//常用格式的格式化,结果:2017-03-01
String formatDate = DateUtil.formatDate(date);

//结果:2017-03-01 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);

//结果:00:00:00
String formatTime = DateUtil.formatTime(date);

2.4 开始和结束时间

有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,DateUtil也提供了相关方法:

String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);

//一天的开始,结果:2017-03-01 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);

//一天的结束,结果:2017-03-01 23:59:59
Date endOfDay = DateUtil.endOfDay(date);

3 StrUtil

这个工具的用处类似于Apache Commons Lang中的StringUtil,常用的方法例如isBlank、isNotBlank、isEmpty、isNotEmpty。

3.1  hasBlank方法

就是给定一些字符串,如果一旦有空的就返回true,常用于判断好多字段是否有空的(例如web表单数据)。

这两个方法的区别是hasEmpty只判断是否为null或者空字符串(""),hasBlank则会把不可见字符也算做空,isEmpty和isBlank同理。

3.2 removePrefix方法

这两个是去掉字符串的前缀后缀的,例如去个文件名的扩展名啥。

String fileName = StrUtil.removeSuffix("pretty_girl.jpg"".jpg")  //fileName -> pretty_girl

还有忽略大小写的removePrefixIgnoreCase和removeSuffixIgnoreCase都比较实用。

3.3 sub方法

不得不提一下这个方法,有人说String有了subString你还写它干啥,我想说subString方法越界啥的都会报异常,而使用StrUtil的sub就不会报错:

String str = "abcdefgh";
String strSub1 = StrUtil.sub(str, 23); //strSub1 -> c
String strSub2 = StrUtil.sub(str, 2, -3); //strSub2 -> cde
String strSub3 = StrUtil.sub(str, 32); //strSub2 -> c

3.4 format方法

灵感来自slf4j,可以使用字符串模板代替字符串拼接。

String template = "{}爱{},就像老鼠爱大米";
String str = StrUtil.format(template, 






请到「今天看啥」查看全文