首页 > 编程语言 >Hutool,一个超好用的 Java 工具类库

Hutool,一个超好用的 Java 工具类库

时间:2023-09-07 09:01:57浏览次数:50  
标签:类库 DateUtil Java BigDecimal int Hutool Validator 工具 String

一、简介

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、转 BigDecimal
        BigDecimal 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:ss
        String now = DateUtil.now();
         //当前日期字符串,格式:yyyy-MM-dd
        String today = DateUtil.today();
        //3、获得月份,从0开始计数
        int month = DateUtil.month(new Date());
        //4、格式化后的字符串 默认yyyy-MM-dd HH:mm:ss
        String 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、数字相加 如果为空默认加0
        BigDecimal decimal = BigDecimal.valueOf(10);
        //返回10
        BigDecimal add = NumberUtil.add(decimal, null);
    }

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

    //1、相加,9 + null = 9
    BigDecimal 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 返回true
    boolean isGreater(BigDecimal bigNum1, BigDecimal bigNum2);

    //11、取最大值
    BigDecimal max(BigDecimal... numberArray);

    //12、字符串转数字
    BigDecimal toBigDecimal(String numberStr);

    //13、空转0
    BigDecimal 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****2210
    DesensitizedUtil.mobilePhone("13712345678");
    //【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****
    DesensitizedUtil.address("北京市海淀区被顺街道",4);
    //还有 邮箱、车牌、邮箱、银行卡、密码......
}

6、字段校验工具Validator

  public static void main(String[] args) {
        //1、判断字符串是否全部为字母组成,包括大写和小写字母和汉字
        Validator.isLetter("小小宝贝");
        //2、验证该字符串是否是数字
        Validator.isNumber("123");
        //3、验证是否为可用邮箱地址
        Validator.isEmail("[email protected]");
        //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/#/



声明: 公众号如需转载该篇文章,发表文章的头部一定要 告知是转至公众号: 后端元宇宙。同时也可以问本人要markdown原稿和原图片。其它情况一律禁止转载!

标签:类库,DateUtil,Java,BigDecimal,int,Hutool,Validator,工具,String
From: https://www.cnblogs.com/qdhxhz/p/17677257.html

相关文章

  • java基础-idea的使用-day07
    目录1.idea的获取2.已经安装的idea如何卸载3.idea的安装与破解3.设置4.写代码常用快捷建的使用1.idea的获取链接:https://pan.baidu.com/s/1x-WT04lbJ_1FXCP3kWcihg?pwd=ufjh提取码:ufjh2.已经安装的idea如何卸载对于免安装的idea:(1)删除安装文件(2)到用户下将idea的缓......
  • java中CAS是什么?原理是什么?CAS有什么缺点
    什么是CAS?CAS叫做CompareAndSwap,比较并交换,主要是通过处理器的指令来保证操作的原子性。CAS的原理是什么?CAS包含三个操作数:1.  变量内存地址,V表示2.  旧的预期值,A表示3.  准备设置的新值,B表示当执行CAS指令时,只有当V等于A时,才会用B去更新V的值,否则就不会执行更新操作。CAS......
  • JAVA学习路线
    学习Java基础知识是成为一名Java开发者的重要第一步。以下是一些建议的资源和一个大致的学习时间安排:学习资源:官方文档和教程:Java的官方网站(Oracle或OpenJDK)提供了丰富的文档和教程,包括JavaSE教程。这些资源是学习Java的很好起点。在线课程:有许多免费和付费的在线课程,如Co......
  • java的List调用toString以后去除两端[]括号
    原始代码:List<Integer>vids=newArrayList<>();if(planList!=null&&planList.size()>0){for(inti=0;i<planList.size();i++){VoicePlanListEntityvoicePlanListEntity=newVoi......
  • Java中有哪些方式能实现锁某个变量
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top首发博客地址系列文章地址在Java中,有几种方式可以实现对某个变量的锁定:使用synchronized关键字:synchronized关键字是Java中最常用的实现锁的方式之一。通过在方法或代码块......
  • 《Java编程思想第四版》学习笔记25
    若调用了break和continue语句,finally语句也会得以执行。请注意,与作上标签的break和continue一道,finally排除了Java对goto跳转语句的需求。                                       ......
  • 《Java编程思想第四版》学习笔记24
    //:FinallyWorks.java//ThefinallyclauseisalwaysexecutedpublicclassFinallyWorks{staticintcount=0;publicstaticvoidmain(String[]args){while(true){try{//post-incrementiszerofirsttime:......
  • 无涯教程-JavaScript - WEEKDAY函数
    描述WEEKDAY函数返回与日期相对应的星期几。缺省情况下,日期以整数形式给出,范围从1(星期日)到7(星期六)语法WEEKDAY(serial_number,[return_type])争论Argument描述Required/OptionalSerial_number一个序号,代表您要查找的日期。应该使用DATE函数或其他公式或函......
  • 无涯教程-JavaScript - TODAY函数
    描述TODAY函数返回当前日期的序列号。序列号是Excel用于日期和时间计算的日期时间代码。如果在输入函数之前单元格格式为"常规",Excel会将单元格格式更改为"日期"。如果要查看序列号,必须将单元格格式更改为"常规"或"数字"。语法TODAY()争论TODAYFunction语法没有参数。......
  • 使用JavaScript计算两点经纬度之间的弧线点经纬度数组
    前言地球是一个近似于椭球体的三维物体,因此在计算两个经纬度点之间的距离时,不能简单地将其视为平面上的直线距离。相反,我们需要考虑地球的曲率,并使用球面三角法来计算两点之间的弧线距离及其中的插值点。通过本篇博客,我们将使用JavaScript来实现根据两个经纬度点返回两点之间的弧......