首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hutool工具包-常用开发工具类(让代码更简洁)

Hutool工具包-常用开发工具类(让代码更简洁)

作者头像
Java微观世界
发布2025-01-20 21:05:51
发布2025-01-20 21:05:51
1.1K0
举报
文章被收录于专栏:springbootspringboot

一、简介

  • Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率
  • Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间
  • 一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
在这里插入图片描述
在这里插入图片描述
  • 可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块
代码语言:javascript
复制
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

二、常见类型转换

1、转换为字符串

代码语言:javascript
复制
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);

2、转换为指定类型数组

代码语言:javascript
复制
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[] d = { "1", "2", "3", "4" };
//结果为BigDecimal数组
//Number是BigDecimal的父类
Number[] numbers = Convert.toNumberArray(d);

3、转换为日期对象

代码语言:javascript
复制
String a = "2017-05-06";
// 转换为Date
Date date = Convert.toDate(a);
// 转换为LocalDateTime
LocalDateTime localDateTime = Convert.toLocalDateTime(a);

4、转换为集合

代码语言:javascript
复制
String[] strArray = {"a", "b", "c"};
List<String> list = Convert.toList(String.class, strArray);

5、指定泛型

代码语言:javascript
复制
Object[] a = { "a", "你", "好", "", 1 };
List<String> list = Convert.convert(new TypeReference<List<String>>() {}, a);

6、转换为指定类型

代码语言:javascript
复制
User u = new User("1002","tom",18);
Person p = Convert.convert(Person.class, u);

三、时间日期

1、当前时间字符串

代码语言:javascript
复制
//当前时间 yyyy-MM-dd HH:mm:ss
Date date = DateUtil.date();

//当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();

//当前日期字符串,格式:yyyy-MM-dd
String today= DateUtil.today();

2、字符串转Date

  • DateUtil.parse方法会自动识别一些常用格式,包括:
    • yyyy-MM-dd HH:mm:ss
    • yyyy/MM/dd HH:mm:ss
    • yyyy年MM月dd日 HH时mm分ss秒
    • yyyyMMdd
    • yyyy-MM-dd
    • yyyy.MM.dd
    • HH:mm:ss
    • yyyy-MM-dd HH:mm:ss.SSS
    • yyyyMMddHHmmss
代码语言:javascript
复制
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);

也可以使用自定义日期格式转化:

代码语言:javascript
复制
String dateStr = "2017-03-01 10:10:20";
Date date = DateUtil.parse(dateStr, "yyyyMMdd");

3、Date转字符串

代码语言:javascript
复制
// 当前时间
Date date = DateUtil.date();

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

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

//结果:2023-03-27 13:59:53
String formatDateTime = DateUtil.formatDateTime(date);

//结果:13:59:53
String formatTime = DateUtil.formatTime(date);

//结果:20230713171836
String formatStr1 = DateUtil.format(date, DatePattern.PURE_DATETIME_PATTERN);
String formatStr2 = DateUtil.format(date, "yyyyMMddHHmmss");

4、获取Date对象的某个部分

代码语言:javascript
复制
Date date = DateUtil.date();
//获得年的部分 int类型
DateUtil.year(date);
//获得月份,从0开始计数,int类型
DateUtil.month(date);
//获得月份枚举
DateUtil.monthEnum(date);
//获取日期是星期几,1表示周日,2表示周一,int类型
DateUtil.dayOfWeek(date);
//获取日期是所在年的第几天
DateUtil.dayOfYear(date);

5、开始和结束时间

代码语言:javascript
复制
//当前时间
Date date = DateUtil.date();

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

//一天的结束
// MySQL数据库对于毫秒大于500的数据进行进位,如果用time,入库会变成第二天时间 00:00:00
Date time = DateUtil.endOfDay(new Date());
Date time1 = DateUtil.endOfDay(DateUtil.date()).offset(DateField.MILLISECOND, -999);

// 2023-07-17 23:59:59,999
String format = DateUtil.format(time, "yyyy-MM-dd HH:mm:ss,SSS");
// 2023-07-17 23:59:59,000
String format1 = DateUtil.format(time1, "yyyy-MM-dd HH:mm:ss,SSS");

6、日期时间偏移

代码语言:javascript
复制
String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);

//加2天 结果:2017-03-03 22:33:23
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);

//加3天 常用偏移,结果:2017-03-04 22:33:23
DateTime newDate2 = DateUtil.offsetDay(date, 3);

//减3个小时 常用偏移,结果:2017-03-01 19:33:23
DateTime newDate3 = DateUtil.offsetHour(date, -3);

7、日期时间对象-DateTime

  • DateTime类继承于java.util.Date类,为Date类扩展了众多简便方法
  • 这些方法多是DateUtil静态方法的对象表现形式,使用DateTime对象可以完全替代开发中Date对象的使用
7.1、创建对象
代码语言:javascript
复制
Date date = new Date();

//方式一
DateTime time = new DateTime(date);
//方式二
DateTime dt = DateTime.of(date);
//方式三
DateTime dateTime = new DateTime();
//方式四
DateTime now = DateTime.now();
7.2、DateTime转字符串
代码语言:javascript
复制
DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
//结果:2017-01-05 12:34:23
String dateStr = dateTime.toString();
//结果:20170105
String dateString = dateTime.toString("yyyyMMdd");

四、工具类

1、字符串工具-StrUtil

1.1、移除字符串的前缀后缀
代码语言:javascript
复制
// 去掉指定后缀 fileName -> girl
String fileName = StrUtil.removeSuffix("girl.jpg", ".jpg");

// 去掉指定前缀 suffix -> jpg
String suffix = StrUtil.removePrefix("girl.jpg", "girl.");
1.2、字符串填充
代码语言:javascript
复制
// 字符串前填充 结果:"00abc"
StrUtil.fillBefore("abc", '0', 5);

// 字符串前填充 结果:"abc111"
StrUtil.fillAfter("abc", '1', 6);
1.3、指定分隔符字符串与集合互转⭐️
代码语言:javascript
复制
String str = "a,b,c";
// 转为集合
List<String> list = StrUtil.split(str, ','); // 结果:[a, b, c]

// 转为‘-’分割字符串
// 方式一:list可以是String或者Long类型集合
String join1 = StrUtil.join(",", list); // 结果:a-b-c
// 方式二:list只能String类型集合,否则报错
String join2 = String.join(",", list); // 结果:a-b-c
1.4、获取字符串根据指定字符切分的前后
代码语言:javascript
复制
String str = "1-状态";
// 结果:1
String beforeStr = StringUtil.substringBefore(str, "-");
// 结果:状态
String afterStr = StringUtil.substringAfter(str, "-");
1.5、标点符号字符串常量定义
代码语言:javascript
复制
/**
 * 常用字符串常量定义
 */
public interface StrPool {
	/**
	 * 字符串常量:制表符 {@code "\t"}
	 */
	String TAB = "	";

	/**
	 * 字符串常量:点 {@code "."}
	 */
	String DOT = ".";

	/**
	 * 字符串常量:双点 {@code ".."} <br>
	 * 用途:作为指向上级文件夹的路径,如:{@code "../path"}
	 */
	String DOUBLE_DOT = "..";

	/**
	 * 字符串常量:斜杠 {@code "/"}
	 */
	String SLASH = "/";

	/**
	 * 字符串常量:反斜杠 {@code "\\"}
	 */
	String BACKSLASH = "\\";

	/**
	 * 字符串常量:回车符 {@code "\r"} <br>
	 * 解释:该字符常用于表示 Linux 系统和 MacOS 系统下的文本换行
	 */
	String CR = "\r";

	/**
	 * 字符串常量:换行符 {@code "\n"}
	 */
	String LF = "\n";
	
	...

}

2、数字工具-NumberUtil

2.1、加减乘除
  • NumberUtil.add 针对数字类型做加法
  • NumberUtil.sub 针对数字类型做减法
  • NumberUtil.mul 针对数字类型做乘法
  • NumberUtil.div 针对数字类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式
代码语言:javascript
复制
 // 结果:5.062
 BigDecimal bigDecimal = new BigDecimal("10.1234");
 BigDecimal decimal = NumberUtil.div(bigDecimal, 2,3);
2.2、随机数
代码语言:javascript
复制
//返回1~10000的两个随机数
int[] ints = NumberUtil.generateRandomNumber(1, 10000, 2);

3、数组工具-ArrayUtil

3.1、指定元素所在位置
代码语言:javascript
复制
String [] array = {"a","b","c"};
// 结果:1
int index = ArrayUtil.indexOf(array, "b");
3.2、最大值和最小值
代码语言:javascript
复制
String [] array = {"a","b","c"};
// 结果:"a"
String min = ArrayUtil.min(array);
// 结果:"c"
String max = ArrayUtil.max(array);

4、随机工具-RandomUtil

4.1、获得随机数int值
代码语言:javascript
复制
// 结果:2075115567
int randomInt = RandomUtil.randomInt();
4.2、获得指定范围内的随机数
  • 最小数(包含
  • 最大数(不包含
代码语言:javascript
复制
// 结果:77
int randomInt = RandomUtil.randomInt(10,100);

// 结果:12  获取0~20的整数,不包括20
int anInt = RandomUtil.randomInt(20);
4.3、获得一个随机固定长度的字符串(只包含数字和字符)
代码语言:javascript
复制
// 结果:jh4gddb0tn
String str = RandomUtil.randomString(10);
4.4、获得一个只包含数字的固定长度字符串
代码语言:javascript
复制
// 结果:73648
String str = RandomUtil.randomNumbers(5);

5、树结构工具-TreeUtil

  • 数据库字段及结构如下
在这里插入图片描述
在这里插入图片描述
5.1、最简单方式构建Tree
  • TreeNode表示一个抽象的节点,也表示数据库中一行数据
    • 第一个参数id
    • 第二个参数父id
    • 第三个参数id的名称
    • 第四个参数顺序,越小优先级越高 默认0(没顺序字段写null就行)
  • TreeUtil.build(nodeList, "0")中的0表示顶层id为0,查询0下级的数据(不包括0)
代码语言:javascript
复制
// 构建node列表
List<TreeNode<String>> nodeList = CollUtil.newArrayList();

nodeList.add(new TreeNode<>("1", "0", "系统管理", 5));
nodeList.add(new TreeNode<>("11", "1", "用户管理", 10));
nodeList.add(new TreeNode<>("111", "11", "用户添加", 11));
nodeList.add(new TreeNode<>("2", "0", "店铺管理", 5));
nodeList.add(new TreeNode<>("21", "2", "商品管理", 10));
nodeList.add(new TreeNode<>("221", "2", "商品管理2", 11));

// 0表示最顶层的id是0
List<Tree<String>> treeList = TreeUtil.build(nodeList, "0");

展示结果

在这里插入图片描述
在这里插入图片描述
5.2、自定义根节点
  • TreeUtil.build(nodeList, "1")中的0表示顶层id为1,查询1-系统管理下级的数据(不包括1-系统管理)
代码语言:javascript
复制
List<Tree<String>> treeList = TreeUtil.build(nodeList, "1");

展示结果

在这里插入图片描述
在这里插入图片描述
5.3、添加扩展字段
代码语言:javascript
复制
// 构建node列表
List<TreeNode<String>> nodeList = CollUtil.newArrayList();

// TreeNode对象的构建
TreeNode<String> treeNode = new TreeNode<>();
treeNode.setId("1");
treeNode.setName("系统管理");
treeNode.setParentId("0");
// 添加扩展字段
Map<String, Object> map = Maps.newHashMap();
map.put("k1", RandomUtil.randomInt()); // 随机数
map.put("k2", RandomUtil.randomString(5)); // 随机字符串
treeNode.setExtra(map);
// 添加TreeNode到列表
nodeList.add(treeNode);

// 省略其他TreeNode对象的构建
...

// 0表示最顶层的id是0
List<Tree<String>> treeList = TreeUtil.build(nodeList, "0");

展示结果

在这里插入图片描述
在这里插入图片描述
5.4、自定义字段
  • 如果数据库中字段不是id、name、parentId如何处理
代码语言:javascript
复制
// 构建node列表
List<TreeNode<String>> nodeList = CollUtil.newArrayList();

nodeList.add(new TreeNode<>("1", "0", "系统管理", 5));
nodeList.add(new TreeNode<>("11", "1", "用户管理", 10));
nodeList.add(new TreeNode<>("111", "11", "用户添加", 11));
nodeList.add(new TreeNode<>("2", "0", "店铺管理", 5));
nodeList.add(new TreeNode<>("21", "2", "商品管理", 10));
nodeList.add(new TreeNode<>("221", "2", "商品管理2", 11));

// 配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
treeNodeConfig.setWeightKey("order");
treeNodeConfig.setIdKey("menuId");
treeNodeConfig.setNameKey("menuName");
treeNodeConfig.setParentIdKey("menuParentId");
treeNodeConfig.setChildrenKey("childrenList");

// 转换器
List<Tree<String>> treeList = TreeUtil.build(nodeList, "0", treeNodeConfig, new DefaultNodeParser<>());

展示结果

在这里插入图片描述
在这里插入图片描述

五、Hutool参考文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
  • 二、常见类型转换
    • 1、转换为字符串
    • 2、转换为指定类型数组
    • 3、转换为日期对象
    • 4、转换为集合
    • 5、指定泛型
    • 6、转换为指定类型
  • 三、时间日期
    • 1、当前时间字符串
    • 2、字符串转Date
    • 3、Date转字符串
    • 4、获取Date对象的某个部分
    • 5、开始和结束时间
    • 6、日期时间偏移
    • 7、日期时间对象-DateTime
      • 7.1、创建对象
      • 7.2、DateTime转字符串
  • 四、工具类
    • 1、字符串工具-StrUtil
      • 1.1、移除字符串的前缀后缀
      • 1.2、字符串填充
      • 1.3、指定分隔符字符串与集合互转⭐️
      • 1.4、获取字符串根据指定字符切分的前后
      • 1.5、标点符号字符串常量定义
    • 2、数字工具-NumberUtil
      • 2.1、加减乘除
      • 2.2、随机数
    • 3、数组工具-ArrayUtil
      • 3.1、指定元素所在位置
      • 3.2、最大值和最小值
    • 4、随机工具-RandomUtil
      • 4.1、获得随机数int值
      • 4.2、获得指定范围内的随机数
      • 4.3、获得一个随机固定长度的字符串(只包含数字和字符)
      • 4.4、获得一个只包含数字的固定长度字符串
    • 5、树结构工具-TreeUtil
      • 5.1、最简单方式构建Tree
      • 5.2、自定义根节点
      • 5.3、添加扩展字段
      • 5.4、自定义字段
  • 五、Hutool参考文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档