- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
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 提供的功能实在太多,这里只列举一些我个人觉得比较实用的功能,供大家学习参考.
只要你需要用到类型转换的,你都先别急着自己造轮子,可以先来这里找找.
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);
}
还有很多很多,只要你想到的这里基本上都有.
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);
}
这个数字工具在实际开发中还是蛮有用的,一般我们进行数字加减的时候,很容易因为数据为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);
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);
}
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);
//还有 邮箱、车牌、邮箱、银行卡、密码......
}
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);
}
用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原稿和原图片。其它情况一律禁止转载! 。
最后此篇关于Hutool,一个超好用的Java工具类库的文章就讲到这里了,如果你想了解更多关于Hutool,一个超好用的Java工具类库的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题在这里已经有了答案: Android ADT version required 20.0.0 and above (10 个答案) 关闭 9 年前。 我刚刚安装了 Eclipse Juno
按照 This page from codeplex 上的指南进行操作后,我无法在我的工具/选项窗口中看到 Python 选项。我认为我与指南的唯一偏差是: 发行版:没有安装 activestate
我有一个非常大的 .sql 脚本。我将此脚本添加到 Visual Studio 2013 下的 SQL Server 项目中。当我尝试构建它时,我收到此错误消息 This T-SQL script e
当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢? IDEA中提供
我正在做一个项目来减少 PDF 的大小,压缩它们。我想知道市场上是否有任何非常好的工具/库(.NET)。 我确实尝试了一些像 Onstream Compression 这样的工具,但结果并不令人满意。
我想从我的源代码编译一个安卓内核。 但我想使用工具或类似的东西。 所以我只需单击一个按钮并获得一个可闪存的 zip 文件... 有工具吗? 我可以用脚本来做吗? 谢谢! 最佳答案 这取决于您从哪里获得
我们生成 pdf 文件,其中包含有关数万名客户每月财务余额的数据。在高峰期(年底有 100.000 个文件),使用在 5 台服务器之间分配负载,该过程可能需要长达 5 天的时间才能完成。工作负载的分配
模块:xmllib xmllib 是一个非验证的低级语法分析器。应用程序员使用的 xmllib 可以覆盖 XMLParser 类,并提供处理文档元素(如特定或类属标记,或字符实体)的方法。从 Py
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我在一家医疗保健公司工作,拥有有关患者位置(地址、城市、州、 zip )的信息。我试图确定有多少百分比的患者住在离 5 个特定位置最近的地方。我正在寻找的答案是“25% 的患者住在离#1 地点最近的地
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 4年前关闭。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
请问我在哪里可以得到 SvcTraceViewer 工具? 我尝试下载并安装许多 SDK。 我查看了程序文件的垃圾箱。 我需要它来跟踪我的 WCF 调用出了什么问题。 最佳答案 您可以通过下载 Win
我正在尝试在我最喜欢的编辑器中设置适当的代码完成功能,我们将其称为AnEditor,以避免互联网上充斥着特定于程序的答案。 (您知道语言是ALanguage。)编辑器具有两个我喜欢的功能:它既可以在控
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当 merge 的两个分支对同一文件有更改时,Mercurial 是否总是使用外部 merge 工具? 或者它是否首先查看它是否可以 merge 文件本身,如果不能,则仅转向外部工具? 我问的原因是我
我正在为我使用的编辑器编写 Scala 插件,该插件将突出显示所有未使用的代码路径(可能未使用 defs 、 vals 、 classes 和 implicits ),并为用户提供一个选项以将它们从.
我有 jquery 工具滚动器...我喜欢它只为 swipeLeft swipeRight 实现触摸选项。 当我使用 touch: true 时,它也会在向上/向下滑动时旋转.. 我按照此处的说明
我已经尝试了一些用于构建 UML(对象/依赖图)的 Eclipse 工具,但我真正需要的是一个工具来生成这样的代码外 UML。 (反之亦然) 我更喜欢一个简单的 UML 工具,它易于安装并且没有任何依
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我是一名优秀的程序员,十分优秀!