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


    一、简介

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

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

    以计算MD5为例:

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

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

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


    二、包含组件

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

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

    <dependency>
        <groupId>cn.hutoolgroupId>
        <artifactId>hutool-allartifactId>
        <version>5.8.16version>
    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("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 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 map = CollStreamUtil.toIdentityMap(list, Student::getStudentId);
            //2、学生id -> 学生名称
            Map map1 = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);
            //3、学生id -> 学生集合
            Map> map2 = CollStreamUtil.groupByKey(list, Student::getClassId);
            //4、获取用户名集合
            List list1 = CollStreamUtil.toList(null, Student::getName);
        }
    

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

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



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

  • 相关阅读:
    相比SiteGPT,用HelpLook创建Chatbot有哪些优势?
    gitLab 使用tortoiseGit 克隆新项目 一直提示tortoiseGitPlink输入密码 输完也不生效
    自学(黑客)技术方法————网络安全
    图像处理:推导Canny边缘检测算法
    安卓开发基础知识-补习9
    K8S集群进行分布式负载测试
    Jcmsuite:旋转对称发射器
    记录一次Python深浅copy的问题
    ERP、CRM、SRM、PLM、HRM、OA……都是啥意思
    VTM/VVC 编译与测试-&&- YUV与RGB空间转换
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/17677257.html