赞
踩
本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我们会用到的工具类,就无需我们自己去封装了
以前我还自己去封装,emmm,我真的太傻了~,但是自己封装也不是不好,但是学会站在巨人的肩膀上,也非常有必要
下面就简单介绍一下 HuTool工具 与 其简单使用
相关链接:
Hutool 是一个小而全的 Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,涵盖了Java开发开发中的方方面面
使用 Hutool 可节省开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug
该工具类主要对 文件、流、加密解密、转码、正则、线程、XML等 JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
模块 | 介绍 |
---|---|
hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 |
hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 |
hutool-cache | 简单缓存实现 |
hutool-core | 核心,包括Bean操作、日期、各种Util等 |
hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 |
hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 |
hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 |
hutool-dfa | 基于DFA模型的多关键字查找 |
hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) |
hutool-http | 基于HttpUrlConnection的Http客户端封装 |
hutool-log | 自动识别日志实现的日志门面 |
hutool-script | 脚本执行封装,例如Javascript |
hutool-setting | 功能更强大的Setting配置文件和Properties封装 |
hutool-system | 系统参数调用封装(JVM信息等) |
hutool-json | JSON实现 |
hutool-captcha | 图片验证码实现 |
hutool-poi | 针对POI中Excel和Word的封装 |
hutool-socket | 基于Java的NIO和AIO的Socket封装 |
hutool-jwt | JSON Web Token (JWT)封装实现 |
可根据需求对每个模块 单独引入,也可以通过引入hutool-all
方式引入所有模块
HuTool 工具 的API文档与官网把其能干的事情说的很详细了,下面主要是列举出工具类能干什么,方法有哪些,顺带可以提一下原理是啥,会用并且懂原理是最好的学习方式
使用首先导包,在项目的 pom.xml 中加入以下内容:【Hutool 5.x 支持 JDK8+,JDK7 使用 Hutool 4.x版本】Maven中央库
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.0</version>
</dependency>
若使用jar包,可去该 下载jar 网址下载hutool-all-X.X.X.jar
即可
本小节主要围绕着 hutool 提供的工具类/功能为小点进行说明,一部分的说明来自官方文档,一部分来自看的源码,这里的源码版本为对应5.8.0(若与您看的源码有所不同,请查看版本是否相同)
本篇博客主要对项目开发过程中涉及的信息的有效性验证,例如电话号码、身份证号、社会信用代码,对身份敏感的数据需要脱敏等,常用的一些工具类的封装( API 文档 )
PhoneUtil 工具类主要完成对电话号码的一些校验进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
方法 | 功能 | 原理 |
---|---|---|
isMobile isMobileHk isMobileTw isMobileMo | 验证是否为手机号码(中国) 验证是否为手机号码(香港) 验证是否为手机号码(台湾) 验证是否为手机号码(澳门) | 正则匹配 |
isTel isTel400800 | 验证是否为座机号码(中国) 验证是否为座机号码(中国)+ 400 + 800 | 正则匹配 |
hideBefore hideBetween hideAfter | 隐藏手机号前7位 替换字符为"*“ 隐藏手机号中间4位 替换字符为”*“ 隐藏手机号最后4位 替换字符为”*" | substring |
subBefore subBetween subAfter subTelBefore subTelAfter | 获取手机号前3位 获取手机号中间4位 获取手机号后4位 获取固话号码中的区号 获取固话号码中的号码 | substring |
isPhone | 验证是否为座机号码+手机号码(CharUtil中国)+ 400 + 800电话 + 手机号号码(香港) |
IdcardUtil 工具类主要完成对身份证的一些校验进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
方法 | 功能 | 支持类型 | 原理 |
---|---|---|---|
isValidCard isValidCard18 isValidCard18 isValidCard15 isValidCard10 isValidTWCard isValidHKCard | 是否有效身份证号,忽略X的大小写(18位 / 15位 / 10位) 判断18位身份证的合法性,可选择是否忽略大小写,默认忽略 验证15位身份编码是否合法 验证10位身份编码是否合法 验证台湾身份证号码 验证香港身份证号码(部分特殊身份证无法检查) | String | substring 分别判断 |
getBirthByIdCard getBirth getBirthDate getAgeByIdCard getAgeByIdCard getYearByIdCard getMonthByIdCard getDayByIdCard getGenderByIdCard getProvinceCodeByIdCard getProvinceByIdCard getCityCodeByIdCard getDistrictCodeByIdCard | 根据身份编号获取指定信息,例如生日、年龄、性别,只支持15或18位身份证号码 | String | substring |
convert15To18 | 将15位身份证号码转换为18位 | String | substring |
hide | 隐藏指定位置的身份证号数字为“*” | String | substring |
getIdcardInfo | 获取身份证信息,包括身份、城市代码、生日、性别等 | String | |
getCheckCode18 | 将power和值与11取模获得余数进行校验码判断 获得18位身份证校验码 | int String | |
getPowerSum | 将身份证的每位和对应位的加权因子相乘之后,再得到和值 | Class |
其里面主要针对 全局唯一Id 或 ID 的一些功能进行实现
具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
方法 | 功能 | 原理 |
---|---|---|
randomUUID simpleUUID | 获取随机UUID 简化的UUID,去掉了横线 | UUID.randomUUID() |
fastUUID fastSimpleUUID | 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID | UUID.randomUUID() |
getSnowflake | 获取单例的Twitter的Snowflake 算法生成器对象,用于生成全局唯一ID,ID按照时间有序生成 | |
getDataCenterId getWorkerId | 获取数据中心ID(数据中心ID依赖于本地网卡MAC地址) 获取机器ID,使用进程ID配合数据中心ID生成(机器依赖于本进程ID或进程名的Hash值) | |
objectId | 创建MongoDB ID生成策略实现 | |
nanoId | 获取随机NanoId(NanoId是一个小型、安全、对 URL友好的唯一字符串 ID 生成器) | |
getSnowflakeNextId getSnowflakeNextIdStr | 简单获取 Snowflake 的 nextId |
其里面主要针对 随机元素 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
方法 | 功能 | 支持类型 | 原理 |
---|---|---|---|
getRandom getSecureRandom getSHA1PRNGRandom getSecureRandomStrong | 获取随机数产生器 获取SHA1PRNG的 SecureRandom,类提供加密的强随机数生成器 获取SHA1PRNG的 SecureRandom,类提供加密的强随机数生成器 获取algorithms/providers中提供的强安全随机生成器 | ||
createSecureRandom | 创建 SecureRandom,类提供加密的强随机数生成器 | ||
randomBoolean randomChinese randomInt randomInts randomLong randomDouble randomBigDecimal randomBytes randomNumbers randomChar | 获得随机Boolean值 获得随机汉字 获得随机int值 获得随机int值数组 获得随机Long值,可指定范围 [0,limit) 获得随机Double值[0, 1),可指定范围 获得指定范围内的随机数[0, 1),可指定范围 获得随机bytes 获得随机数字,0~9单个数字 随机字母或数字,小写,或者指定样本 | 随机数生成器对象进行生成 | |
randomEle randomEles randomEleList randomEleSet | 随机获得列表中的元素 随机获得列表中的一定量元素(可能获取重复位置的元素) 随机获得列表中的一定量的元素(不会获取重复位置的元素) 随机获得列表中的一定量的不重复元素,返回Set | List / T | 先随机生成下标,再获取即可 |
randomString randomStringUpper randomStringWithoutStr | 获得一个随机的字符串(只包含数字和字符) 获得一个随机的字符串(只包含数字和大写字符) 获得一个随机的字符串(只包含数字和小写字母) 并排除指定字符串 | ||
weightRandom | 生成带有权重的随机生成器 | ||
randomDay randomDate | 以当天为基准,随机产生一个日期 以给定日期为基准,随机产生一个日期 |
其里面主要针对 正则表达式相关 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
方法 | 功能 | 支持类型 | 原理 |
---|---|---|---|
get getGroup0 getGroup1 getAllGroups getAllGroupNames | 获取匹配的字符串 获得正则中分组0的内容 获得正则中分组1的内容 获得匹配的字符串匹配到的所有分组 根据给定正则查找字符串中的匹配项,返回所有匹配的分组名对应分组值 | CharSequence | Pattern.matcher |
extractMulti extractMultiAndDelPre | 从content中匹配出多个值并根据template生成新的字符串 从content中匹配出多个值并根据template生成新的字符串,匹配结束后会删除匹配内容之前的内容(包括匹配内容) 例子:content 2013年5月 pattern (.*?)年(.*?)月 template: $1-$2 return 2013-5 | CharSequence | Pattern.matcher、String.replace |
findAll findAllGroup0 findAllGroup1 | 取得内容中匹配的所有结果 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容 | CharSequence | Pattern.matcher |
delFirst replaceFirst delLast delAll delPre replaceAll | 删除匹配的第一个内容 替换匹配的第一个内容 删除匹配的最后一个内容 删除匹配的全部内容 删除正则匹配到的内容之前的字符 如果没有找到,则返回原文 正则替换指定值 | CharSequence | Pattern.matcher、String.replace |
count indexOf lastIndexOf | 计算指定字符串中,匹配pattern的个数 找到指定正则匹配到字符串的开始位置 找到指定正则匹配到第一个字符串的位置 | CharSequence | Pattern.matcher |
contains isMatch | 指定内容中是否有表达式匹配的内容 给定内容是否匹配正则 | CharSequence | Pattern.matcher |
getFirstNumber | 从字符串中获得第一个整数 | CharSequence | Pattern.matcher |
escape | 转义字符,将正则的关键字转义 | CharSequence / char | Pattern.matcher |
其里面主要针对 文件压缩 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
方法 | 功能 | 支持类型 | 原理 |
---|---|---|---|
zip unzip | 打包,可指定打包源目录(默认当前目录)、打包目的目录(默认当前目录)、可指定编码(默认编码UTF-8) 解压,可指定解压源目录(默认当前目录)、解压的目的目录(默认当前目录)、可指定编码(默认编码UTF-8) | String、File | io流操作 |
gzip unGzip | Gzip压缩处理 Gzip解压处理 | String、byte[]、File、InputStream | io流操作 |
zlib unZlib | Zlib压缩处理 Zlib解压缩处理 | String、byte[]、File、InputStream | io流操作 |
get getStream getZipOutputStream | 获取压缩包中的指定input文件流 获取指定 ZipEntry 的input流,用于读取这个entry的内容 获取output流 | File、ZipFile ZipFile OutputStream | io流操作 |
append | 在zip文件中添加新文件或目录 | Path | io流操作 |
read | 读取并处理Zip文件中的每一个 ZipEntry | ZipFile | io流操作 |
unzipFileBytes | 从Zip文件中提取指定的文件为bytes | File | io流操作 |
listFileNames | 获取Zip文件中指定目录下的所有文件名称,只显示文件,不显示目录 | ZipFile | io流操作 |
其里面主要针对 统一社会信用代码 的一些功能进行封装
有效的统一社会信用代码
方法 | 功能 | 支持类型 | 原理 |
---|---|---|---|
isCreditCode | 是否是有效的统一社会信用代码 | CharSequence | 通过校验码来判断 |
isCreditCodeSimple | 正则校验是否是统一社会信用代码(18位) | CharSequence | 正则判断 |
randomCreditCode | 获取一个随机的统一社会信用代码 |
其里面主要针对 坐标系转换 的一些功能进行封装
这里的坐标系分为三种:(坐标系由经度与纬度构成)
方法 | 功能 |
---|---|
outOfChina | 判断坐标是否在国外 |
wgs84ToGcj02 wgs84ToBd09 | WGS84 转换为 火星坐标系 (GCJ-02) WGS84 坐标转为 百度坐标系 (BD-09) 坐标 |
gcj02ToWgs84 gcj02ToBd09 | 火星坐标系 (GCJ-02) 转换为 WGS84 火星坐标系 (GCJ-02) 转换为百度坐标系 (BD-09) |
bd09ToGcj02 bd09toWgs84 | 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 百度坐标系 (BD-09) 与 WGS84 的转换 |
其里面主要针对 信息脱敏的 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法
这里采用的默认脱敏策略为:
方法 | 功能 | 支持类型 | 原理 |
---|---|---|---|
desensitized | 根据脱敏类型脱敏字符串,使用默认的脱敏策略, | CharSequence | XMLReader.parse |
userId | 脱敏 【用户id】不对外提供userId | Object | 序列化实现 |
chineseName | 脱敏【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李** | ||
idCardNum | 脱敏【身份证号】前1位 和后2位 | ||
fixedPhone | 脱敏【固定电话】前四位,后两位 | ||
mobilePhone | 脱敏 【手机号码】前三位,后4位,其他隐藏,比如135****2210 | ||
address | 脱敏【地址】只显示到地区,不显示详细地址,比如:北京市海淀区**** | ||
脱敏【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com | |||
password | 脱敏【密码】密码的全部字符都用代替,比如:***** | ||
carLicense | 脱敏【中国车牌】车牌中间用*代替 | ||
bankCard | 脱敏 银行卡号 1101 **** **** **** 3256 |
我觉得这一类别也算是比较常用的,电话号码、身份证、坐标系、脱敏都是我们开发中常用的信息校验
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。