Hutool常用开发工具类简介(StrUtil、CollUtil、BeanUtil…)

Hutool是一个小而全的Java工具类库,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅。

官网:https://www.hutool.cn
官方文档:https://hutool.cn/docs/#/core/工具类/概述

通过引入hutool-all依赖来引入全部模块

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


1 Convert

类型转换

1.1 转换为字符串

  • String toStr(obj):转换任意对象为字符串
int a = 8;
String aStr = Convert.toStr(a);	// "8"

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

1.2 转换为指定类型数组

  • Integer[] toIntArray(obj):转换为Integer数组
  • Number[] toNumberArray(obj):转换为Number(BigDecimal的父类)数组
  • ……
String[] b = {"1", "2", "3", "4"};
Integer[] intArray = Convert.toIntArray(b);

long[] c = {1, 2, 3, 4, 5};
Integer[] intArray2 = Convert.toIntArray(c);

String[] d = {"1", "2", "3", "4"};
Number[] numbers = Convert.toNumberArray(d);

1.3 转换为日期对象

  • Date toDate(str):转换为Date
  • LocalDateTime toLocalDateTime(str):转换为LocalDateTime
String a = "2024-06-29";

Date date = Convert.toDate(a);
LocalDateTime localDateTime = Convert.toLocalDateTime(a);

1.4 转换为集合

  • List<T> toList(arr):转换为列表
  • ……
String[] strArray = {"a", "k", "i", "r", "a"};
List<String> list = Convert.toList(strArray);

1.5 转换为指定类型

  • convert(clazz, obj):转换为指定类型
User user = new User("202037", "kina", 20);
Person person = Convert.convert(Person.class, user);

2 DateUtil

2.1 当前时间

  • Date date():当前时间(Date类),格式为yyyy-MM-dd HH:mm:ss
  • String now():当前时间字符串,格式为yyyy-MM-dd HH:mm:ss
  • String today():当前日期字符串,格式为yyyy-MM-dd
Date date = DateUtil.date();
String now = DateUtil.now();
String today= DateUtil.today();

2.2 字符串转Date

  • Date parse(dateStr [, formatStr]):字符串转Date,可自动识别以下常用格式,或提供自定义日期格式
    • 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
String dateStr1 = "2023-06-29 12:00:00";
String dateStr2 = "2023/06/29 12:00:00";
String dateStr3 = "2023年06月29日 12时00分00秒";
String dateStr4 = "20230629";
String dateStr5 = "2023-06-29";
String dateStr6 = "2023.06.29";
String dateStr7 = "12:00:00";
String dateStr8 = "2023-06-29 12:00:00.123";
String dateStr9 = "20230629120000";

Date date1 = DateUtil.parse(dateStr1); // 默认格式 yyyy-MM-dd HH:mm:ss
Date date2 = DateUtil.parse(dateStr2); // 默认格式 yyyy/MM/dd HH:mm:ss
Date date3 = DateUtil.parse(dateStr3, "yyyy年MM月dd日 HH时mm分ss秒"); // 自定义格式
Date date4 = DateUtil.parse(dateStr4, "yyyyMMdd"); // 自定义格式
Date date5 = DateUtil.parse(dateStr5); // 默认格式 yyyy-MM-dd
Date date6 = DateUtil.parse(dateStr6, "yyyy.MM.dd"); // 自定义格式
Date date7 = DateUtil.parse(dateStr7, "HH:mm:ss"); // 自定义格式
Date date8 = DateUtil.parse(dateStr8, "yyyy-MM-dd HH:mm:ss.SSS"); // 自定义格式
Date date9 = DateUtil.parse(dateStr9, "yyyyMMddHHmmss"); // 自定义格式

2.3 Date转字符串

  • String format(date, formatStr):自定义转换后的日期格式
  • String formatDate(date):常用格式的格式化,仅转日期
  • String formatTime(date):常用格式的格式化,仅转时间
  • String formatDateTime(date):常用格式的格式化,日期、时间均转
Date date = DateUtil.parse("2023-06-29 12:34:56");

String customFormat = DateUtil.format(date, "yyyy/MM/dd HH:mm:ss"); // "2023/06/29 12:34:56"
String formattedDate = DateUtil.formatDate(date); // "2023-06-29"
String formattedTime = DateUtil.formatTime(date); // "12:34:56"
String formattedDateTime = DateUtil.formatDateTime(date); // "2023-06-29 12:34:56"

2.4 获取Date对象的某个部分

  • int year(date):获取年
  • int month(date):获得月份,从0开始计数
  • ? monthEnum(date):获得月份枚举
  • int dayOfWeek(date):获取星期几,1表示周日,2表示周一
  • int dayOfYear(date):获取是所在年的第几天
Date date = DateUtil.parse("2023-06-29 12:34:56");

int year = DateUtil.year(date); // 2023
int month = DateUtil.month(date); // 5 (六月是第6个月,但从0开始计数)
int monthEnum = DateUtil.monthEnum(date).getValue(); // 6 (HuTool的MonthEnum从1开始)
int dayOfWeek = DateUtil.dayOfWeek(date); // 5 (2023-06-29 是星期四)
int dayOfYear = DateUtil.dayOfYear(date); // 180

2.5 开始和结束时间

  • Date beginOfDay(date):某天的开始
  • Date endOfDay(date):某天的结束
  • Date beginOfWeek(date [, isMondayAsFirstDay]):某周的开始(可设置是否周一做为一周的开始)
  • Date endOfWeek(date [, isSundayAsLastDay]):某周的结束(可设置是否周日做为一周的结束)
  • Date beginOfMonth(date):某月的开始
  • Date endOfMonth(date):某月的结束
  • Date beginOfQuarter(date):某季度的开始
  • Date endOfQuarter(date):某季度的结束
  • Date beginOfYear(date):某年的开始
  • Date endOfYear(date):某年的结束
Date date = DateUtil.parse("2023-06-29 12:34:56");

// 某天的开始和结束
Date beginOfDay = DateUtil.beginOfDay(date); // 2023-06-29 00:00:00
Date endOfDay = DateUtil.endOfDay(date); // 2023-06-29 23:59:59

// 某周的开始和结束
Date beginOfWeekDefault = DateUtil.beginOfWeek(date); // 2023-06-26 00:00:00, 周一定为一周的开始
Date beginOfWeekSunday = DateUtil.beginOfWeek(date, false); // 2023-06-25 00:00:00, 周日为一周的开始
Date endOfWeekDefault = DateUtil.endOfWeek(date); // 2023-07-02 23:59:59, 周日为一周的结束
Date endOfWeekSaturday = DateUtil.endOfWeek(date, false); // 2023-07-01 23:59:59, 周六为一周的结束

// 某月的开始和结束
Date beginOfMonth = DateUtil.beginOfMonth(date); // 2023-06-01 00:00:00
Date endOfMonth = DateUtil.endOfMonth(date); // 2023-06-30 23:59:59

// 某季度的开始和结束
Date beginOfQuarter = DateUtil.beginOfQuarter(date); // 2023-04-01 00:00:00
Date endOfQuarter = DateUtil.endOfQuarter(date); // 2023-06-30 23:59:59

// 某年的开始和结束
Date beginOfYear = DateUtil.beginOfYear(date); // 2023-01-01 00:00:00
Date endOfYear = DateUtil.endOfYear(date); // 2023-12-31 23:59:59

2.6 计算两个时间之差

  • long between(beginDate, endDate, unit [, isAbs]):判断两个日期相差的时长,其中DateUnit枚举参数unit表示相差的单位,可为天DateUnit.DAY、小时DateUnit.HOUR等。可设置是否只保留绝对值。
  • long betweenMs(beginDate, endDate):判断两个日期相差的毫秒数。
  • long betweenDay(beginDate, endDate, isReset):判断两个日期相差的天数。其中isReset为是否重置时间为起始时间(忽略时分秒),下同。
  • long betweenWeek(beginDate, endDate, isReset):计算指定时间区间内的周数。
Date beginDate = DateUtil.parse("2023-06-01 12:00:00");
Date endDate = DateUtil.parse("2023-06-29 15:00:00");

// 计算两个日期相差的天数、小时数等
long daysBetween = DateUtil.between(beginDate, endDate, DateUnit.DAY); // 28
long hoursBetween = DateUtil.between(beginDate, endDate, DateUnit.HOUR); // 676
long daysBetweenAbs = DateUtil.between(beginDate, endDate, DateUnit.DAY, true); // 28

// 计算两个日期相差的毫秒数
long millisecondsBetween = DateUtil.betweenMs(beginDate, endDate); // 2433600000

// 计算两个日期相差的天数,是否忽略时分秒
long daysBetweenReset = DateUtil.betweenDay(beginDate, endDate, true); // 28
long daysBetweenNoReset = DateUtil.betweenDay(beginDate, endDate, false); // 28

// 计算两个日期相差的周数,是否忽略时分秒
long weeksBetweenReset = DateUtil.betweenWeek(beginDate, endDate, true); // 4
long weeksBetweenNoReset = DateUtil.betweenWeek(beginDate, endDate, false); // 4

3 StrUtil

3.1 移除前缀后缀

  • String removeSuffix(str, suffix):移除后缀
  • String removePrefix(str,prefix):移除前缀
  • void trim(String[] strs):给定字符串数组全部做去首尾空格
String strWithSuffix = "example.txt";
String strWithPrefix = "prefix_example";
String[] strsWithSpaces = {"  hello  ", "  world  ", "  Hutool  "};

// 移除后缀
String removedSuffix = StrUtil.removeSuffix(strWithSuffix, ".txt"); // "example"

// 移除前缀
String removedPrefix = StrUtil.removePrefix(strWithPrefix, "prefix_"); // "example"

// 去除字符串数组的首尾空格
StrUtil.trim(strsWithSpaces); // strsWithSpaces 变为 ["hello", "world", "Hutool"]

3.2 填充

  • String fill(str, ch, len, isPre):用字符将字符串填充至指定长度,需设置是否填充在前
  • String fillBefore(str, ch, len):用字符将字符串前填充至指定长度
  • String fillAfter(str, ch, len):用字符将字符串后填充至指定长度
String originalStr = "HuTool";

// 用字符将字符串填充至指定长度
String filledPre = StrUtil.fill(originalStr, '#', 10, true); // "####HuTool"
String filledPost = StrUtil.fill(originalStr, '#', 10, false); // "HuTool####"

// 用字符将字符串前填充至指定长度
String filledBefore = StrUtil.fillBefore(originalStr, '*', 10); // "****HuTool"

// 用字符将字符串后填充至指定长度
String filledAfter = StrUtil.fillAfter(originalStr, '-', 10); // "HuTool----"

3.3 分割与拼接

  • List<String> split(str, ch):指定分隔符分割字符串,存入集合
  • String substringBefore(str, ch):根据指定字符切分字符串,获取前半部分
  • String substringAfter(str, ch):根据指定字符切分字符串,获取后半部分
  • String join(ch, list):将String或Long类型集合元素用指定分隔符拼接为字符串
String str1 = "  Hello, World!  ";
String str2 = "Hello";
String str3 = "world";
String str4 = "2023-06-29";
String str5 = "2023-06-29 12:34:56";
String str6 = "12345";

// 去除字符串两端的空格
String trimStr = StrUtil.trim(str1); // "Hello, World!"

// 判断字符串是否为空白
boolean isBlank = StrUtil.isBlank(str1); // false

// 判断字符串是否为空
boolean isEmpty = StrUtil.isEmpty(str1); // false

// 判断字符串是否相等,忽略大小写
boolean equalsIgnoreCase = StrUtil.equalsIgnoreCase(str2, str3); // false

// 截取字符串指定范围内的字符
String subStr = StrUtil.sub(str1, 2, 7); // "Hello"

// 字符串格式化
String formatStr = StrUtil.format("Date is: {}", str4); // "Date is: 2023-06-29"

// 字符串转换为Date
Date dateFromStr = DateUtil.parse(str5); // 解析为日期对象

// 字符串转换为整数
int intFromStr = StrUtil.toInt(str6); // 12345

3.4 判空

  • boolean isEmptyIfStr(obj):若对象是字符串,则是否为空串——null或空字符串""
  • boolean isBlankIfStr(obj):若对象是字符串,则是否为空白——null或空字符串""或任何不可见字符
Object obj1 = null;
Object obj2 = "";
Object obj3 = "   ";
Object obj4 = "Hutool";

// 判断对象是否为空字符串
boolean isEmptyIfStr1 = StrUtil.isEmptyIfStr(obj1); // true
boolean isEmptyIfStr2 = StrUtil.isEmptyIfStr(obj2); // true
boolean isEmptyIfStr3 = StrUtil.isEmptyIfStr(obj3); // false
boolean isEmptyIfStr4 = StrUtil.isEmptyIfStr(obj4); // false

// 判断对象是否为空白字符串
boolean isBlankIfStr1 = StrUtil.isBlankIfStr(obj1); // true
boolean isBlankIfStr2 = StrUtil.isBlankIfStr(obj2); // true
boolean isBlankIfStr3 = StrUtil.isBlankIfStr(obj3); // true
boolean isBlankIfStr4 = StrUtil.isBlankIfStr(obj4); // false

……

  • 45
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
hutool工具常用包括型转换工具(Convert)、字符串工具StrUtil / StringUtils)、日期工具(DateUtil)、数字工具(NumberUtil)、数组工具(ArrayUtil)、随机工具(RandomUtil)、比较器工具(ComparatorUtil)、多线程工具(ThreadUtil)、IO流工具(FileUtil)、集合工具CollUtil / CollectionsUtils)、正则工具(ReUtil)、网络工具(NetUtil)、JSON工具(JSONUtil)、系统信息工具(SystemUtil)等等。这些工具提供了一系列常用的方法和功能,能够帮助开发者更加方便地进行型转换、字符串处理、日期操作、数字处理、数组操作、随机数生成、多线程管理、IO流操作、集合操作、正则表达式匹配、网络操作、JSON处理、系统信息获取等等。通过使用hutool工具开发者可以提高开发效率,减少代码量,提供更加稳定和高效的程序功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Hutool常用工具](https://blog.csdn.net/abst122/article/details/124091375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [hutool 工具](https://download.csdn.net/download/LiHaoYang11/12153632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [常用工具 (三) : Hutool 常用工具整理 (全)](https://blog.csdn.net/m0_37989980/article/details/126401041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Akira37

💰unneeded

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值