很多方法请看官网地址:hutool官网地址
www.887551.com下载:https://www.jb51.net/softs/549331.html
hutool是一个小而全的java工具类库,通过静态方法封装,降低相关api的学习成本,提高工作效率,使java拥有函数式语言般的优雅,让java语言也可以“甜甜的”。
hutool中的工具方法来自每个用户的精雕细琢,它涵盖了java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
hutool名称的由来
hutool = hu + tool,是原公司项目底层代码剥离后的开源库,“hu”是公司名称的表示,tool表示工具。hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。
hutool如何改变我们的coding方式
hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。
以计算md5为例:
【以前】打开搜索引擎 -> 搜“java md5加密” -> 打开某篇博客-> 复制粘贴 -> 改改好用
【现在】引入hutool -> cureutil.md5()
hutool的存在就是为了减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug。
一个java基础工具类,对文件、流、加密解密、转码、正则、线程、xml等jdk方法进行封装,组成各种util工具类,同时提供以下组件:
maven
在项目的pom.xml的dependencies中加入以下内容:
<dependency> <groupid>cn.hutool</groupid> <artifactid>hutool-all</artifactid> <version>5.5.2</version></dependency>
在java开发中我们要面对各种各样的类型转换问题,尤其是从命令行获取的用户参数、从httprequest获取的parameter等等,这些参数类型多种多样,我们怎么去转换他们呢?常用的办法是先整成string,然后调用xxx.parxxx方法,还要承受转换失败的风险,不得不加一层try catch,这个小小的过程混迹在业务代码中会显得非常难看和臃肿。
convert类可以说是一个工具方法类,里面封装了针对java常见类型的转换,用于简化类型转换。convert类中大部分方法为toxxx,参数为object,可以实现将任意可能的类型转换为指定类型。同时支持第二个参数defaultvalue用于在转换失败时返回一个默认值。
1.转换为字符串:
int a = 1;//astr为"1"string astr = convert.tostr(a);long[] b = {1,2,3,4,5};//bstr为:"[1, 2, 3, 4, 5]"string bstr = convert.tostr(b);
2.转换为指定类型数组:
string[] b = { "1", "2", "3", "4" };//结果为integer数组integer[] intarray = convert.tointarray(b);long[] c = {1,2,3,4,5};//结果为integer数组integer[] intarray2 = convert.tointarray(c);
3.转换为日期对象:
string a = "2017-05-06";date value = convert.todate(a);
4.转换为集合
object[] a = {"a", "你", "好", "", 1};list<?> list = convert.convert(list.class, a);//从4.1.11开始可以这么用list<?> list = convert.tolist(a);
1.标准类型
通过convert.convert(class, object)方法可以将任意类型转换为指定类型,hutool中预定义了许多类型转换,例如转换为uri、url、calendar等等,这些类型的转换都依托于converterregistry类。通过这个类和converter接口,我们可以自定义一些类型转换。详细的使用请参阅“自定义类型转换”一节。
2.泛型类型
通过convert(typereference reference, object value)方法,自行new一个typereference对象可以对嵌套泛型进行类型转换。例如,我们想转换一个对象为list类型,此时传入的标准class就无法满足要求,此时我们可以这样:
object[] a = { "a", "你", "好", "", 1 };list<string> list = convert.convert(new typereference<list<string>>() {}, a);
通过typereference实例化后制定泛型类型,即可转换对象为我们想要的目标类型。
16进制(hex)
在很多加密解密,以及中文字符串传输(比如表单提交)的时候,会用到16进制转换,就是hex转换,为此hutool中专门封装了hexutil工具类,考虑到16进制转换也是转换的一部分,因此将其方法也放在convert类中,便于理解和查找,使用同样非常简单:
转为16进制(hex)字符串
string a = "我是一个小小的可爱的字符串";//结果:"e68891e698afe4b880e4b8aae5b08fe5bfilm08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2"string hex = convert.tohex(a, chart总领事馆和大使馆的区别util.chart_utf_8);
将16进制(hex)字符串转为普通字符串:
string hex = "e68891e698afe4b880e4b8aae5b08fe5b08femagine79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2";//结果为:"我是一个小小的可爱的字符串"string raw = convert.hexstrtostr(hex, chartutil.chart_utf_8);//注意:在4.1.11之后hexstrtostr将改名为hextostrstring raw = convert.hextostr(hex, chartutil.chart_utf_8);
因为字符串牵涉到编码问题,因此必须传入编码对象,此处使用utf-8编码。 tohex方法同样支持传入byte[],同样也可以使用hextobytes方法将16进制转为byte[]
与16进制类似,convert类同样可以在字符串和unicode之间轻松转换:
string a = "我是一个小小的可爱的字符串";//结果为:"\\u6211\\u662f\\u4e00\\u4e2a\\u5c0f\\u5c0f\\u7684\\u53ef\\u7231\\u7684\\u5b57\\u7b26\\u4e32" string unicode = convert.strtounicode(a);//结果为:"我是一个小小的可爱的字符串"string raw = convert.unicodetostr(unicode);
在接收表单的时候,我们常常被中文乱码所困扰,其实大多数原因是使用了不正确的编码方式解码了数据。于是convert.convertchart方法便派上用场了,它可以把乱码转为正确的编码方式:
string a = "我不是乱码";//转换后result为乱码string result = convert.convertchart(a, chartutil.utf_8, chartutil.iso_8859_1);string raw = convert.convertchart(result, chartutil.iso_8859_1, "utf-8");asrt.asrtequals(raw, a);
注意 经过测试,utf-8编码后用gbk解码再用gbk编码后用utf-8解码会存在某些中文转换失败的问题。
convert.converttime方法主要用于转换时长单位,比如一个很大的毫秒,我想获得这个毫秒数对应多少分:
long a = 4535345;//结果为:75long minutes = convert.converttime(a, timeunit.milliconds, timeunit.minutes);
面对财务类需求,convert.digittochine将金钱数转换为大写形式:
double a = 67556.32;//结果为:"陆万柒仟伍佰伍拾陆元叁角贰分"string digitupperca = convert.digittochine(a);
注意 转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略。
有的时候,我们需要将包装类和原始类相互转换(比如integer.class 和 int.class),这时候我们可以:
//去包装class<?> wrapclass = integer.class;//结果为:int.classclass<?> unwraped = convert.unwrap(wrapclass);//包装class<?> primitiveclass = long.class;//结果为:long.classclass<?> wraped = convert.wrap(primitiveclass);ctrl p
调用tostring()方法即可返回格式为yyyy-mm-dd hh:mm:ss的字符串,调用tostring(string format)可以返回指定格式的字符串。
datetime datetime = new datetime("2017-01-05 12:34:23", datepattern.norm_datetime_format);//结果:2017-01-05 12:34:23string datestr = datetime.tostring();//结果:2017/01/05
日期转换
string datestr = "2020-01-23t12:23:56";datetime dt = dateutil.par(datestr);// date对象转换为localdatetimelocaldatetime of = localdatetimeutil.of(dt);// 时间戳转换为localdatetimeof = localdatetimeutil.ofutc(dt.gettime());
日期字符串解析
// 解析iso时间localdatetime localdatetime = localdatetimeutil.par("2020-01-23t12:23:56");// 解析自定义格式时间localdatetime = localdatetimeutil.par("2020-01-23", datepattern.norm_date_pattern);
解析同样支持localdate:
localdate localdate = localdatetimeutil.pardate("2020-01-23");// 解析日期时间为localdate,时间部分舍弃localdate = localdatetimeutil.pardate("2020-01-23t12:23:56", datetimeformatter.iso_date_time);
日期格式化
localdatetime localdatetime = localdatetimeutil.par("2020-01-23t12:23:56");// "2020-01-23 12:23:56"string format = localdatetimeutil.format(localdatetime, datepattern.norm_datetime_pattern);
日期偏移
final localdatetime localdatetime = localdatetimeutil.par("2020-01-23t12:英雄联盟巨魔之王23:56");// 增加一天// "2020-01-24t12:23:56"localdatetime offt = localdatetimeutil.offt(localdatetime, 1, chronounit.days);
如果是减少时间,offt第二个参数传负数即可:
// "2020-01-22t12:23:56"offt = localdatetimeutil.offt(localdatetime, -1, chronounit.days);
日期偏移
localdatetime start = localdatetimeutil.par("2019-02-02t00:00:00");localdatetime end = localdatetimeutil.par("2020-02-02t00:00:00");duration between = localdatetimeutil.between(start, end);// 365between.todays();
一天的开始和结束
localdatetime localdatetime = localdatetimeutil.par("2020-01-23t12:23:56");// "2020-01-23t00:00"localdatetime beginofday = localdatetimeutil.beginofday(localdatetime);// "2020-01-23t23:59:59.999999999"localdatetime endofday = localdatetimeutil.endofday(localdatetime);
1.removeprefix、removesuffix方法
这两个是去掉字符串的前缀后缀的,例如去个文件名的扩展名啥。
string filename = strutil.removesuffix("pretty_girl.jpg", ".jpg") //filename -> pretty_girl
还有忽略大小写的removeprefixignoreca和removesuffixignoreca都比较实用。
2. sub方法
不得不提一下这个方法,有人说string有了substring你还写它干啥,我想说substring方法越界啥的都会报异常,你还得自己判断,难受死了,我把各种情况判断都加进来了,而且index的位置还支持负数哦,-1表示最后一个字符(这个思想来自于python,如果学过python的应该会很喜欢的),还有就是如果不小心把第一个位置和第二个位置搞反了,也会自动修正(例如想截取第4个和第2个字符之间的部分也是可以的哦~) 举个栗子
string str = "abcdefgh";string strsub1 = strutil.sub(str, 2, 3); //strsub1 -> cstring strsub2 = strutil.sub(str, 2, -3); //strsub2 -> cdestring strsub3 = strutil.sub(str, 3, 2); //strsub2 -> c
3.format方法
string template = "{}爱{},就像老鼠爱大米";string str = strutil.format(template, "我", "你"); //str -> 我爱你,就像老鼠爱大米
参数我定义成了object类型,如果传别的类型的也可以,会自动调用tostring()方法的。
以md5为例:
digester md5 = new digester(digestalgorithm.md5);// 5393554e94bf0eb6436f240a4fd71282string digesthex = md5.digesthex(teststr);
当然,做为最为常用的方法,md5等方法被封装为工具方法在digestutil中,以上代码可以进一步简化为:
// 5393554e94bf0eb6436f240a4fd71282string md5hex1 = digestutil.md5hex(teststr);
最简单的使用莫过于用httputil工具类快速请求某个页面:
//get请求string content = httputil.get(url);
一行代码即可搞定,当然post请求也很简单:
//post请求hashmap<string, object> parammap = new hashmap<>();parammap.put("city", "北京");string result1 = httputil.post(url, parammap);
post请求只需使用map预先制定form表单项即可。
到此这篇关于全文最详细hutool工具详解的文章就介绍到这了,更多相关hutool工具内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-03 23:50:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/9d85826d88244e42fa023cac89dc1d1c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:全网最详细Hutool工具详解.doc
本文 PDF 下载地址:全网最详细Hutool工具详解.pdf
留言与评论(共有 0 条评论) |