最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

腳本之家下載:http://www.fzitv.net/softs/549331.html

簡介

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

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

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

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

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

以計算MD5為例:

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

包含組件

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

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

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

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

痛點

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

Convert類

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

Java常見類型轉換

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

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

long[] c = {1,2,3,4,5};
//結果為Integer數(shù)組
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接口,我們可以自定義一些類型轉換。詳細的使用請參閱“自定義類型轉換”一節(jié)。

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 = "我是一個小小的可愛的字符串";

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

將16進制(Hex)字符串轉為普通字符串:

String hex = "e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2";

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

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

因為字符串牽涉到編碼問題,因此必須傳入編碼對象,此處使用UTF-8編碼。 toHex方法同樣支持傳入byte[],同樣也可以使用hexToBytes方法將16進制轉為byte[]

Unicode和字符串轉換

與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);

編碼轉換

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

String a = "我不是亂碼";
//轉換后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解碼會存在某些中文轉換失敗的問題。

時間單位轉換

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

long a = 4535345;

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

金額大小寫轉換

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

double a = 67556.32;

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

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

原始類和包裝類轉換

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

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

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

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

//結果為: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);
//結果:2017-01-05 12:34:23
String dateStr = dateTime.toString();

//結果:2017/01/05

LocalDateTime工具-LocalDateTimeUtil

使用

日期轉換

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

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

// 時間戳轉換為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ù)傳負數(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();

一天的開始和結束

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方法
這兩個是去掉字符串的前綴后綴的,例如去個文件名的擴展名啥。

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

還有忽略大小寫的removePrefixIgnoreCase和removeSuffixIgnoreCase都比較實用。
2. sub方法
不得不提一下這個方法,有人說String有了subString你還寫它干啥,我想說subString方法越界啥的都會報異常,你還得自己判斷,難受死了,我把各種情況判斷都加進來了,而且index的位置還支持負數(shù)哦,-1表示最后一個字符(這個思想來自于Python,如果學過Python的應該會很喜歡的),還有就是如果不小心把第一個位置和第二個位置搞反了,也會自動修正(例如想截取第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);

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

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

Hutool-http

最簡單的使用莫過于用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工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在springboot中如何給mybatis加攔截器

    在springboot中如何給mybatis加攔截器

    這篇文章主要介紹了在springboot中如何給mybatis加攔截器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • request.getRequestURL()等方法得到路徑的區(qū)別及說明

    request.getRequestURL()等方法得到路徑的區(qū)別及說明

    這篇文章主要介紹了request.getRequestURL()等方法得到路徑的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 淺析對Spring?aware接口理解

    淺析對Spring?aware接口理解

    通過aware接口可以獲取Spring容器相關信息,但這樣會與Spring容器耦合,這篇文章主要介紹了Spring?aware接口理解,需要的朋友可以參考下
    2022-08-08
  • java實現(xiàn)五子棋程序

    java實現(xiàn)五子棋程序

    這篇文章主要為大家詳細介紹了java實現(xiàn)五子棋程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 查找jdk安裝路徑并且切換多版本jdk的詳細步驟

    查找jdk安裝路徑并且切換多版本jdk的詳細步驟

    在日常的工作學習中可能需要用到不同版本的jdk,下面這篇文章主要給大家介紹了關于查找jdk安裝路徑并且切換多版本jdk的詳細步驟,文中介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • java鎖升級過程過程詳解

    java鎖升級過程過程詳解

    這篇文章主要介紹了Java鎖升級的實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • 教你一步解決java.io.FileNotFoundException:找不到文件異常

    教你一步解決java.io.FileNotFoundException:找不到文件異常

    這篇文章主要給大家介紹了關于如何一步解決java.io.FileNotFoundException:找不到文件異常的相關資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java中二維數(shù)組的正確使用方法介紹

    Java中二維數(shù)組的正確使用方法介紹

    Java中有一維數(shù)組,二維數(shù)組以及多維數(shù)組,在這篇文章中,將給大家詳細介紹一下如何正確使用Java中的二維數(shù)組,感興趣的小伙伴跟著小編一起學習吧
    2023-05-05
  • Java迭代器實現(xiàn)Python中的range代碼實例

    Java迭代器實現(xiàn)Python中的range代碼實例

    這篇文章主要介紹了Java迭代器實現(xiàn)Python中的range代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java的Hibernate框架中集合類數(shù)據(jù)結構的映射編寫教程

    Java的Hibernate框架中集合類數(shù)據(jù)結構的映射編寫教程

    Hibernate可以將Java中幾個內(nèi)置的集合結構映射為數(shù)據(jù)庫使用的關系模型,下面我們就來看一下Java的Hibernate框架中集合類數(shù)據(jù)結構的映射編寫教程:
    2016-07-07

最新評論

呼图壁县| 正定县| 德清县| 准格尔旗| 长沙市| 湘潭市| 信阳市| 绩溪县| 萍乡市| 桂阳县| 邓州市| 淮北市| 瑞昌市| 红桥区| 玛纳斯县| 六枝特区| 平乡县| 体育| 西乡县| 新野县| 忻州市| 泌阳县| 浦县| 兖州市| 新乐市| 朝阳区| 潼南县| 弥勒县| 大余县| 定兴县| 桂阳县| 开化县| 城市| 崇左市| 西城区| 溆浦县| 张北县| 南陵县| 黎平县| 锡林浩特市| 桃园县|