Java工具类库Hutool

这里写目录标题

    • 一、简介
    • 二、包含组件
    • 三、常用功能演示
      • 2、时间工具DateUtil
      • 3、数字类工具NumberUtil
      • 4、身份认证工具IdcardUtil
      • 5、信息脱敏工具DesensitizedUtil
      • 6、字段校验工具Validator
      • 7、集合工具类CollStreamUtil

一、简介

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

Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。

以计算MD5为例:

  • 【以前】打开搜索引擎 -> 搜“Java MD5加密” -> 打开某篇博客-> 复制粘贴 -> 改改好用

  • 【现在】引入Hutool -> SecureUtil.md5()

Hutool的存在就是为了减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug。

二、包含组件

一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:

在这里插入图片描述

可以通过引入hutool-all方式引入所有模块,但还是不建议引入所有模块,因为绝大部分功能项目可能都用不上,建议只引入你需要的模块。

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

另外个人觉得Hutool虽然工具很全,但是有些事情还是交给专业的框架来做,比如http请求,就建议用okhttp或者httpclient,导入导出用easyexcel。

下面介绍一些常用的工具类

三、常用功能演示

Hutool 提供的功能实在太多,这里只列举一些我个人觉得比较实用的功能,供大家学习参考。

####1、类型转换工具Convert类
只要你需要用到类型转换的,你都先别急着自己造轮子,可以先来这里找找。

   public static void main(String[] args) {//1、Object 转 数字Object s = "123";Integer bInt = Convert.toInt(s);//如果给定的值为空,或者转换失败,返回默认值Integer baInt = Convert.toInt("123a", 0);//2、数字转字符串String aStr = Convert.toStr(1);//3、转 BigDecimalBigDecimal sbDecimal = Convert.toBigDecimal("123");//4、金额转为中文形式String chinese = Convert.digitToChinese(12);}

还有很多很多,只要你想到的这里基本上都有。

2、时间工具DateUtil

  public static void main(String[] args) {//1、当前时间Date date = DateUtil.date();Date date2 = DateUtil.date(System.currentTimeMillis());//2、当前时间字符串,格式:yyyy-MM-dd HH:mm:ssString now = DateUtil.now();//当前日期字符串,格式:yyyy-MM-ddString today = DateUtil.today();//3、获得月份,从0开始计数int month = DateUtil.month(new Date());//4、格式化后的字符串 默认yyyy-MM-dd HH:mm:ssString dateTime = DateUtil.formatLocalDateTime(LocalDateTime.now());//格式化后的字符串 指定格式类型。所以类型在DatePattern工具类也可以找 不用在手写String format = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_PATTERN);//5、获取某月的开始时间DateTime dateTime1 = DateUtil.beginOfMonth(new Date());//获取昨天时间DateTime yesterday = DateUtil.yesterday();//6、计时,常用于记录某段代码的执行时间,单位:毫秒long spendMs = DateUtil.spendMs(111111111L);}

3、数字类工具NumberUtil

这个数字工具在实际开发中还是蛮有用的,一般我们进行数字加减的时候,很容易因为数据为null,而报空指针异常。

这个工具类很好的帮我们避免这类问题的发生。

如下示例:

  public static void main(String[] args) {//1、数字相加 如果为空默认加0BigDecimal decimal = BigDecimal.valueOf(10);//返回10BigDecimal add = NumberUtil.add(decimal, null);}

看下这个工具类的常用方法

    //1、相加,9 + null = 9BigDecimal add(BigDecimal... values);BigDecimal add(String... values);//2、相减BigDecimal sub(BigDecimal... values);BigDecimal sub(String... values);//3、相乘BigDecimal mul(BigDecimal... values);BigDecimal mul(String... values);//4、相除,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入BigDecimal div(Number v1, Number v2, int scale);BigDecimal div(String v1, String v2, int scale);//5、保留固定位数小数BigDecimal round(BigDecimal number, int scale);String roundStr(String numberStr, int scale);//6、格式化百分比: 0.23 -> 23%String formatPercent(double number, int scale);//7、字符串是否为数字boolean isNumber(CharSequence str);//8、判断String是否是整数boolean isInteger(String s);//9、生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数int[] generateRandomNumber(int begin, int end, int size);//10、比较大小,参数1 > 参数2 返回trueboolean isGreater(BigDecimal bigNum1, BigDecimal bigNum2);//11、取最大值BigDecimal max(BigDecimal... numberArray);//12、字符串转数字BigDecimal toBigDecimal(String numberStr);//13、空转0BigDecimal null2Zero(BigDecimal decimal);

4、身份认证工具IdcardUtil

public static void main(String[] args) {String ID_18 = "119127189008245110";//是否有效boolean valid = IdcardUtil.isValidCard(ID_18);//年龄int age = IdcardUtil.getAgeByIdCard(ID_18);//生日String birth = IdcardUtil.getBirthByIdCard(ID_18);//省份String province = IdcardUtil.getProvinceByIdCard(ID_18);}

5、信息脱敏工具DesensitizedUtil

public static void main(String[] args) {//【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**DesensitizedUtil.chineseName("张三");//【身份证号】前1位 和后2位DesensitizedUtil.idCardNum("33012345",1,2);//【手机号码】前三位,后4位,其他隐藏,比如135****2210DesensitizedUtil.mobilePhone("13712345678");//【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****DesensitizedUtil.address("北京市海淀区被顺街道",4);//还有 邮箱、车牌、邮箱、银行卡、密码......
}

6、字段校验工具Validator

public static void main(String[] args) {//1、判断字符串是否全部为字母组成,包括大写和小写字母和汉字Validator.isLetter("小小宝贝");//2、验证该字符串是否是数字Validator.isNumber("123");//3、验证是否为可用邮箱地址Validator.isEmail("123456@mall.com");//4、验证是否为手机号码(中国)Validator.isMobile("15612345678");//5、验证是否为身份证号码(支持18位、15位和港澳台的10位)Validator.isCitizenId("330127210006111234");//6、验证是否为中国车牌号Validator.isPlateNumber("小A.88888");//7、验证是否都为汉字Validator.isChinese("小A");//8、检查给定的数字是否在指定范围内Validator.isBetween(3,2,1);}

7、集合工具类CollStreamUtil

用java8的Stream流能够非常简化我们的代码,这个工具类相当于对java8的Stream的写法进一步简写。

public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student(1, 1, 1, "张三"));list.add(new Student(1, 1, 2, "李四"));list.add(new Student(1, 1, 3, "王五"));//1、学生id -> 学生对象Map<Long, Student> map = CollStreamUtil.toIdentityMap(list, Student::getStudentId);//2、学生id -> 学生名称Map<Long, String> map1 = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);//3、学生id -> 学生集合Map<Long, List<Student>> map2 = CollStreamUtil.groupByKey(list, Student::getClassId);//4、获取用户名集合List<String> list1 = CollStreamUtil.toList(null, Student::getName);}

当然上面只是展示了一小部分工具,具体的可以看官方文档,写的清清楚楚,明明白白哇

官方文档: https://www.hutool.cn/docs/#/

到此这篇关于超好用的Java工具类库Hutool用法详解的文章就介绍到这了,更多相关Java Hutool内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类与对象

面向对象的程序设计 面对对象的程序 类 类 .... 类 设计程序的过程&#xff0c;就是设计类的过程。 面对对象的程序设计方法&#xff1a; 1.将某类客观事物共同特点&#xff08;属性&#xff09;归纳出来&#xff0c;形成一个数据结构&#xff08;可以用多个变量描述…

定义HarmonyOS IDL接口

HarmonyOS IDL简介 HarmonyOS Interface Definition Language&#xff08;简称HarmonyOS IDL&#xff09;是HarmonyOS的接口描述语言。HarmonyOS IDL与其他接口语言类似&#xff0c;通过HarmonyOS IDL定义客户端与服务端均认可的编程接口&#xff0c;可以实现在二者间的跨进程…

SpringBoot+Vue实现各种文件预览(附源码)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;在笑大学牲 &#x1f39f;️个人主页&#xff1a;无所谓^_^ ps&#xff1a;点赞是免费的&#xff0c;却可以让写博客的作者开心好几天&#x1f60e; 项目运行效果 前言 在做项目时&#xff0c;文件的上传和预览必不可少。继上…

数字化转型:企业适应新常态的关键之举_光点科技

在全球商业环境不断演变和技术日新月异的背景下&#xff0c;数字化转型已经成为企业不可回避的课题。它不仅关乎企业的未来生存与发展&#xff0c;更是适应新常态、提升竞争力的关键之举。但是&#xff0c;数字化转型并非一夜之间可以完成的任务&#xff0c;它需要全面的策略规…

nosql数据库期末考试知识点总结

目录 1、什么是nosql数据库&#xff0c;它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库&#xff0c;是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

linux中vim的操作

(码字不易&#xff0c;关注一下吧w~~w) 命令模式&#xff1a; 当我们按下esc键时&#xff0c;我们会进入命令模式&#xff1b;当使用vi打开一个文件时也是进入命令模式。 光标移动&#xff1a; 1 保存退出&#xff1a;ZZ 2 代码格式化&#xff1a;ggG 3 光标移动&#xff…

JSP和JSTL板块:第一节 JSP追根溯源 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 JSP和JSTL&#xff1a;第一节 JSP主要内容 一、什么是JSP二、IDEA的JSP相关配置1.UTF-8编码2.JSP代码模板 三、JSP的底层是Servlet四、Jsp的注释1.显式注释2.隐式注释 五、Scriptlet : 写在Jsp里的java脚本段 一、什么是JSP JSP: Java Server Page。SUN 公司提供的动态…

查询、导入导出、统计性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后&#xff0c;被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求&#xff0c;下面针对查询数据表…

【Leetcode】2670. 找出不同元素数目差数组

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的数组 nums &#xff0c;数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示&#xff0c;其中 diff[i] 等于前缀 nums[0, …, i] 中不同元素的数目 减去 后缀 nums[i 1, …, …

双非本科准备秋招(14.1)—— 力扣刷题

今天做两个有点难度的题。 1、295. 数据流的中位数 手写堆实现&#xff1a; 加入元素&#xff1a; 如何维护一个中位数&#xff1f;我们考虑一下堆的特点&#xff0c;大顶堆堆顶是一个最大值&#xff0c;小顶堆堆顶是一个最小值&#xff0c;那么&#xff0c;如果我们可以把数…

GitHub的使用操作

记得看目录哦&#xff01; 1. 创建仓库2. 下载desktop3. 把创建的库克隆到本地4. 文件拷贝到本地仓库![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7171ac6c4ca14e3b8d22717121f79c9e.png)5. 在网址后面加/compare进行比较6. 给系统添加功能 1. 创建仓库 2. 下载…

数据结构之动态查找表

数据结构之动态查找表 1、二叉排序树1.1、二排序树的定义1.2、二叉排序树的查找过程1.3、在二叉排序树中插入结点的操作1.4、在二叉排序树中删除结点的操作 2、平衡二叉树2.1、平衡二叉树上的插入操作2.2、平衡二叉树上的删除操作 3、B_树 数据结构是程序设计的重要基础&#x…

C++——数据类型

C——数据类型 1.基本变量类型 C 基本数据类型整理成表格。以下是一个表格&#xff0c;展示了不同的基本数据类型及其一般用途和大小范围&#xff1a;和C语言类似。 2.宽字符的用法 #include <iostream> #include <locale> #include <wchar.h> int main…

avast网页随机密码生成器

随机密码生成器 | 告别 12345 | Avast 可以生成随机密码 按需调整

MySQL之谈谈MySQL里的日志

文章目录 前言一、SQL是如何做更新操作的二、MySQL中的redo log三、MySQL中的binlog四、聊聊两阶段提交总结 前言 上一章我们讲了一条SQL是如何做查询的&#xff0c;其中经历了许多步骤。这次来讲讲一条SQL是如何做更新操作的。 常有大佬说他可以把MySQL恢复到半个月内任意一秒…

Android搭建python环境

通过wifi连接adb&#xff1a; 首先下载无线abd工具&#xff1a; https://www.downkuai.com/android/170494.html 运行效果图&#xff1a; 然后开启后根据自身ip即可连接&#xff1a; adb connect ip:5555 安装busybox: 首先执行如下命令查看手机架构&#xff1a; adb sh…

Java的JVM学习一

一、java中的内存结构如何划分 栈和堆的区别&#xff1a; 栈负责处理运行&#xff0c;堆负债处理存储。 区域名称作用虚拟机栈用于存储正在执行的每个Java方法&#xff0c;以及其方法的局部变量表等。局部变量表存放了便器可知长度的各种基本数据类型&#xff0c;对象引用&am…

SpringBoot security 安全认证(二)——登录拦截器

本节内容&#xff1a;实现登录拦截器&#xff0c;除了登录接口之外所有接口访问都要携带Token&#xff0c;并且对Token合法性进行验证&#xff0c;实现登录状态的保持。 核心内容&#xff1a; 1、要实现登录拦截器&#xff0c;从Request请求中获取token&#xff0c;从缓存中获…

小程序:类型三级分类

一、效果图片 二、代码 <template><view class"customPosition"><!-- header --><navBar :border"false" :hasBack"true" :title"titleName"></navBar><!-- 查询 --><view class"search…