欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

全網(wǎng)最詳細(xì)Hutool工具詳解

 更新時間:2021年12月01日 16:35:50   作者:技術(shù)老鳥  
Hutool的目標(biāo)是使用一個工具方法代替一段復(fù)雜代碼,從而最大限度的避免“復(fù)制粘貼”代碼的問題,徹底改變我們寫代碼的方式。這篇文章主要介紹了全文最詳細(xì)Hutool工具詳解,需要的朋友可以參考下

很多方法請看官網(wǎng)地址:hutool官網(wǎng)地址

腳本之家下載:http://www.dbjr.com.cn/softs/549331.html

簡介

Hutool是一個小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,使Java擁有函數(shù)式語言般的優(yōu)雅,讓Java語言也可以“甜甜的”。

Hutool中的工具方法來自每個用戶的精雕細(xì)琢,它涵蓋了Java開發(fā)底層代碼中的方方面面,它既是大型項(xiàng)目開發(fā)中解決小問題的利器,也是小型項(xiàng)目中的效率擔(dān)當(dāng);

Hutool是項(xiàng)目中“util”包友好的替代,它節(jié)省了開發(fā)人員對項(xiàng)目中公用類和公用工具方法的封裝時間,使開發(fā)專注于業(yè)務(wù),同時可以最大限度的避免封裝不完善帶來的bug。

Hutool名稱的由來
Hutool = Hu + tool,是原公司項(xiàng)目底層代碼剝離后的開源庫,“Hu”是公司名稱的表示,tool表示工具。Hutool諧音“糊涂”,一方面簡潔易懂,一方面寓意“難得糊涂”。

Hutool如何改變我們的coding方式
Hutool的目標(biāo)是使用一個工具方法代替一段復(fù)雜代碼,從而最大限度的避免“復(fù)制粘貼”代碼的問題,徹底改變我們寫代碼的方式。

以計(jì)算MD5為例:

【以前】打開搜索引擎 -> 搜“Java MD5加密” -> 打開某篇博客-> 復(fù)制粘貼 -> 改改好用
【現(xiàn)在】引入Hutool -> SecureUtil.md5()
Hutool的存在就是為了減少代碼搜索成本,避免網(wǎng)絡(luò)上參差不齊的代碼出現(xiàn)導(dǎo)致的bug。

包含組件

一個Java基礎(chǔ)工具類,對文件、流、加密解密、轉(zhuǎn)碼、正則、線程、XML等JDK方法進(jìn)行封裝,組成各種Util工具類,同時提供以下組件:

模塊 介紹
hutool-aop JDK動態(tài)代理封裝,提供非IOC下的切面支持
hutool-bloomFilter 布隆過濾,提供一些Hash算法的布隆過濾
hutool-cache 簡單緩存實(shí)現(xiàn)
hutool-core 核心,包括Bean操作、日期、各種Util等
hutool-cron 定時任務(wù)模塊,提供類Crontab表達(dá)式的定時任務(wù)
hutool-crypto 加密解密模塊,提供對稱、非對稱和摘要算法封裝
hutool-db JDBC封裝后的數(shù)據(jù)操作,基于ActiveRecord思想
hutool-dfa 基于DFA模型的多關(guān)鍵字查找
hutool-extra 擴(kuò)展模塊,對第三方封裝(模板引擎、郵件、Servlet、二維碼、Emoji、FTP、分詞等)
hutool-http 基于HttpUrlConnection的Http客戶端封裝
hutool-log 自動識別日志實(shí)現(xiàn)的日志門面
hutool-script 腳本執(zhí)行封裝,例如Javascript
hutool-setting 功能更強(qiáng)大的Setting配置文件和Properties封裝
hutool-system 系統(tǒng)參數(shù)調(diào)用封裝(JVM信息等)
hutool-json JSON實(shí)現(xiàn)
hutool-captcha 圖片驗(yàn)證碼實(shí)現(xiàn)
hutool-poi 針對POI中Excel和Word的封裝
hutool-socket 基于Java的NIO和AIO的Socket封裝

Maven
在項(xiàng)目的pom.xml的dependencies中加入以下內(nèi)容:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.2</version>
</dependency>

痛點(diǎn)

在Java開發(fā)中我們要面對各種各樣的類型轉(zhuǎn)換問題,尤其是從命令行獲取的用戶參數(shù)、從HttpRequest獲取的Parameter等等,這些參數(shù)類型多種多樣,我們怎么去轉(zhuǎn)換他們呢?常用的辦法是先整成String,然后調(diào)用XXX.parseXXX方法,還要承受轉(zhuǎn)換失敗的風(fēng)險,不得不加一層try catch,這個小小的過程混跡在業(yè)務(wù)代碼中會顯得非常難看和臃腫。

Convert類

Convert類可以說是一個工具方法類,里面封裝了針對Java常見類型的轉(zhuǎn)換,用于簡化類型轉(zhuǎn)換。Convert類中大部分方法為toXXX,參數(shù)為Object,可以實(shí)現(xiàn)將任意可能的類型轉(zhuǎn)換為指定類型。同時支持第二個參數(shù)defaultValue用于在轉(zhuǎn)換失敗時返回一個默認(rèn)值。

Java常見類型轉(zhuǎn)換

1.轉(zhuǎn)換為字符串:

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.轉(zhuǎn)換為指定類型數(shù)組:

String[] b = { "1", "2", "3", "4" };
//結(jié)果為Integer數(shù)組
Integer[] intArray = Convert.toIntArray(b);

long[] c = {1,2,3,4,5};
//結(jié)果為Integer數(shù)組
Integer[] intArray2 = Convert.toIntArray(c);

3.轉(zhuǎn)換為日期對象:

String a = "2017-05-06";
Date value = Convert.toDate(a);

4.轉(zhuǎn)換為集合

Object[] a = {"a", "你", "好", "", 1};
List<?> list = Convert.convert(List.class, a);
//從4.1.11開始可以這么用
List<?> list = Convert.toList(a);

其它類型轉(zhuǎn)換

1.標(biāo)準(zhǔn)類型
通過Convert.convert(Class, Object)方法可以將任意類型轉(zhuǎn)換為指定類型,Hutool中預(yù)定義了許多類型轉(zhuǎn)換,例如轉(zhuǎn)換為URI、URL、Calendar等等,這些類型的轉(zhuǎn)換都依托于ConverterRegistry類。通過這個類和Converter接口,我們可以自定義一些類型轉(zhuǎn)換。詳細(xì)的使用請參閱“自定義類型轉(zhuǎn)換”一節(jié)。

2.泛型類型
通過convert(TypeReference reference, Object value)方法,自行new一個TypeReference對象可以對嵌套泛型進(jìn)行類型轉(zhuǎn)換。例如,我們想轉(zhuǎn)換一個對象為List類型,此時傳入的標(biāo)準(zhǔn)Class就無法滿足要求,此時我們可以這樣:

Object[] a = { "a", "你", "好", "", 1 };
List<String> list = Convert.convert(new TypeReference<List<String>>() {}, a);

通過TypeReference實(shí)例化后制定泛型類型,即可轉(zhuǎn)換對象為我們想要的目標(biāo)類型。

16進(jìn)制(Hex)

在很多加密解密,以及中文字符串傳輸(比如表單提交)的時候,會用到16進(jìn)制轉(zhuǎn)換,就是Hex轉(zhuǎn)換,為此Hutool中專門封裝了HexUtil工具類,考慮到16進(jìn)制轉(zhuǎn)換也是轉(zhuǎn)換的一部分,因此將其方法也放在Convert類中,便于理解和查找,使用同樣非常簡單:

轉(zhuǎn)為16進(jìn)制(Hex)字符串

String a = "我是一個小小的可愛的字符串";

//結(jié)果:"e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2"
String hex = Convert.toHex(a, CharsetUtil.CHARSET_UTF_8);

將16進(jìn)制(Hex)字符串轉(zhuǎn)為普通字符串:

String hex = "e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2";

//結(jié)果為:"我是一個小小的可愛的字符串"
String raw = Convert.hexStrToStr(hex, CharsetUtil.CHARSET_UTF_8);

//注意:在4.1.11之后hexStrToStr將改名為hexToStr
String raw = Convert.hexToStr(hex, CharsetUtil.CHARSET_UTF_8);

因?yàn)樽址疇可娴骄幋a問題,因此必須傳入編碼對象,此處使用UTF-8編碼。 toHex方法同樣支持傳入byte[],同樣也可以使用hexToBytes方法將16進(jìn)制轉(zhuǎn)為byte[]

Unicode和字符串轉(zhuǎn)換

與16進(jìn)制類似,Convert類同樣可以在字符串和Unicode之間輕松轉(zhuǎn)換:

String a = "我是一個小小的可愛的字符串";

//結(jié)果為:"\\u6211\\u662f\\u4e00\\u4e2a\\u5c0f\\u5c0f\\u7684\\u53ef\\u7231\\u7684\\u5b57\\u7b26\\u4e32"    
String unicode = Convert.strToUnicode(a);

//結(jié)果為:"我是一個小小的可愛的字符串"
String raw = Convert.unicodeToStr(unicode);

編碼轉(zhuǎn)換

在接收表單的時候,我們常常被中文亂碼所困擾,其實(shí)大多數(shù)原因是使用了不正確的編碼方式解碼了數(shù)據(jù)。于是Convert.convertCharset方法便派上用場了,它可以把亂碼轉(zhuǎn)為正確的編碼方式:

String a = "我不是亂碼";
//轉(zhuǎn)換后result為亂碼
String result = Convert.convertCharset(a, CharsetUtil.UTF_8, CharsetUtil.ISO_8859_1);
String raw = Convert.convertCharset(result, CharsetUtil.ISO_8859_1, "UTF-8");
Assert.assertEquals(raw, a);

注意 經(jīng)過測試,UTF-8編碼后用GBK解碼再用GBK編碼后用UTF-8解碼會存在某些中文轉(zhuǎn)換失敗的問題。

時間單位轉(zhuǎn)換

Convert.convertTime方法主要用于轉(zhuǎn)換時長單位,比如一個很大的毫秒,我想獲得這個毫秒數(shù)對應(yīng)多少分:

long a = 4535345;

//結(jié)果為:75
long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);

金額大小寫轉(zhuǎn)換

面對財務(wù)類需求,Convert.digitToChinese將金錢數(shù)轉(zhuǎn)換為大寫形式:

double a = 67556.32;

//結(jié)果為:"陸萬柒仟伍佰伍拾陸元叁角貳分"
String digitUppercase = Convert.digitToChinese(a);

注意 轉(zhuǎn)換為大寫只能精確到分(小數(shù)點(diǎn)兒后兩位),之后的數(shù)字會被忽略。

原始類和包裝類轉(zhuǎn)換

有的時候,我們需要將包裝類和原始類相互轉(zhuǎn)換(比如Integer.class 和 int.class),這時候我們可以:

//去包裝
Class<?> wrapClass = Integer.class;

//結(jié)果為:int.class
Class<?> unWraped = Convert.unWrap(wrapClass);

//包裝
Class<?> primitiveClass = long.class;

//結(jié)果為:Long.class
Class<?> wraped = Convert.wrap(primitiveClass);

格式化為字符串

調(diào)用toString()方法即可返回格式為yyyy-MM-dd HH:mm:ss的字符串,調(diào)用toString(String format)可以返回指定格式的字符串。

DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
//結(jié)果:2017-01-05 12:34:23
String dateStr = dateTime.toString();

//結(jié)果:2017/01/05

LocalDateTime工具-LocalDateTimeUtil

使用

日期轉(zhuǎn)換

String dateStr = "2020-01-23T12:23:56";
DateTime dt = DateUtil.parse(dateStr);

// Date對象轉(zhuǎn)換為LocalDateTime
LocalDateTime of = LocalDateTimeUtil.of(dt);

// 時間戳轉(zhuǎn)換為LocalDateTime
of = LocalDateTimeUtil.ofUTC(dt.getTime());

日期字符串解析

// 解析ISO時間
LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");


// 解析自定義格式時間
localDateTime = LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN);

解析同樣支持LocalDate:

LocalDate localDate = LocalDateTimeUtil.parseDate("2020-01-23");

// 解析日期時間為LocalDate,時間部分舍棄
localDate = LocalDateTimeUtil.parseDate("2020-01-23T12:23:56", DateTimeFormatter.ISO_DATE_TIME);

日期格式化

LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");

// "2020-01-23 12:23:56"
String format = LocalDateTimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN);

日期偏移

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");

// 增加一天
// "2020-01-24T12:23:56"
LocalDateTime offset = LocalDateTimeUtil.offset(localDateTime, 1, ChronoUnit.DAYS);

如果是減少時間,offset第二個參數(shù)傳負(fù)數(shù)即可:

// "2020-01-22T12:23:56"
offset = LocalDateTimeUtil.offset(localDateTime, -1, ChronoUnit.DAYS);

日期偏移

LocalDateTime start = LocalDateTimeUtil.parse("2019-02-02T00:00:00");
LocalDateTime end = LocalDateTimeUtil.parse("2020-02-02T00:00:00");

Duration between = LocalDateTimeUtil.between(start, end);

// 365
between.toDays();

一天的開始和結(jié)束

LocalDateTime localDateTime = LocalDateTimeUtil.parse("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);

字符串工具-StrUtil

1.removePrefix、removeSuffix方法
這兩個是去掉字符串的前綴后綴的,例如去個文件名的擴(kuò)展名啥。

String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg")  //fileName -> pretty_girl

還有忽略大小寫的removePrefixIgnoreCase和removeSuffixIgnoreCase都比較實(shí)用。
2. sub方法
不得不提一下這個方法,有人說String有了subString你還寫它干啥,我想說subString方法越界啥的都會報異常,你還得自己判斷,難受死了,我把各種情況判斷都加進(jìn)來了,而且index的位置還支持負(fù)數(shù)哦,-1表示最后一個字符(這個思想來自于Python,如果學(xué)過Python的應(yīng)該會很喜歡的),還有就是如果不小心把第一個位置和第二個位置搞反了,也會自動修正(例如想截取第4個和第2個字符之間的部分也是可以的哦~) 舉個栗子

String str = "abcdefgh";
String strSub1 = StrUtil.sub(str, 2, 3); //strSub1 -> c
String strSub2 = StrUtil.sub(str, 2, -3); //strSub2 -> cde
String strSub3 = StrUtil.sub(str, 3, 2); //strSub2 -> c

3.format方法

String template = "{}愛{},就像老鼠愛大米";
String str = StrUtil.format(template, "我", "你"); //str -> 我愛你,就像老鼠愛大米

參數(shù)我定義成了Object類型,如果傳別的類型的也可以,會自動調(diào)用toString()方法的。

Digester

以MD5為例:

Digester md5 = new Digester(DigestAlgorithm.MD5);

// 5393554e94bf0eb6436f240a4fd71282
String digestHex = md5.digestHex(testStr);

當(dāng)然,做為最為常用的方法,MD5等方法被封裝為工具方法在DigestUtil中,以上代碼可以進(jìn)一步簡化為:

// 5393554e94bf0eb6436f240a4fd71282
String md5Hex1 = DigestUtil.md5Hex(testStr);

Hutool-http

最簡單的使用莫過于用HttpUtil工具類快速請求某個頁面:

//GET請求
String content = HttpUtil.get(url);

一行代碼即可搞定,當(dāng)然Post請求也很簡單:

//POST請求
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");

String result1 = HttpUtil.post(url, paramMap);

Post請求只需使用Map預(yù)先制定form表單項(xiàng)即可。

到此這篇關(guān)于全文最詳細(xì)Hutool工具詳解的文章就介紹到這了,更多相關(guān)Hutool工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring+apollo動態(tài)獲取yaml格式的配置方式

    spring+apollo動態(tài)獲取yaml格式的配置方式

    這篇文章主要介紹了spring+apollo動態(tài)獲取yaml格式的配置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Java Hibernate中的多種查詢方式及示例

    Java Hibernate中的多種查詢方式及示例

    Hibernate提供了多種查詢方式,包括HQL查詢、SQL查詢、QBC查詢和Criteria查詢等。HQL查詢是基于面向?qū)ο蟮牟樵冋Z言,可以方便地進(jìn)行對象導(dǎo)航和多表查詢;SQL查詢允許用戶直接使用SQL語句進(jìn)行查詢;QBC查詢是基于Criteria的查詢,具有類型安全和可重用性的優(yōu)勢
    2023-04-04
  • Maven中Junit測試@Test等注解無法識別的問題及解決

    Maven中Junit測試@Test等注解無法識別的問題及解決

    這篇文章主要介紹了Maven中Junit測試@Test等注解無法識別的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java 基礎(chǔ)之JavaBean屬性命名規(guī)范問題

    java 基礎(chǔ)之JavaBean屬性命名規(guī)范問題

    這篇文章主要介紹了java 基礎(chǔ)之JavaBean屬性命名規(guī)范問題的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java自帶排序使用

    java自帶排序使用

    這篇文章主要給大家分享了java自帶排序使用,該方法是升序排序,方法的內(nèi)部采用了快排實(shí)現(xiàn),但該方法是?穩(wěn)定的。下面一起來看看文章的詳細(xì)介紹吧
    2021-12-12
  • Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    這篇文章主要介紹了Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議的相關(guān)資料,非常具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程

    Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程

    這篇文章主要介紹了Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring Boot自定義配置屬性源(PropertySource)

    Spring Boot自定義配置屬性源(PropertySource)

    這篇文章主要介紹了Spring Boot自定義配置屬性源(PropertySource),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringBoot + SpringSecurity 短信驗(yàn)證碼登錄功能實(shí)現(xiàn)

    SpringBoot + SpringSecurity 短信驗(yàn)證碼登錄功能實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot + SpringSecurity 短信驗(yàn)證碼登錄功能實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • springMVC中的view視圖詳細(xì)解析

    springMVC中的view視圖詳細(xì)解析

    這篇文章主要介紹了springMVC中的view視圖,springMVC視圖的種類很多,默認(rèn)有轉(zhuǎn)發(fā)視圖和重定向視圖,本文就每一種視圖給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-03-03

最新評論