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

java中Hutool工具類的常見使用場景詳解

 更新時間:2023年12月14日 08:12:44   作者:Java中文社群  
在日常開發(fā)中,我們會使用很多工具類來提升項目開發(fā)的速度,而國內(nèi)用的比較多的 Hutool 框架,就是其中之一,本文我們就來介紹一下Hutool的具體使用吧

在日常開發(fā)中,我們會使用很多工具類來提升項目開發(fā)的速度,而國內(nèi)用的比較多的 Hutool 框架,就是其中之一。

先來看官方對于 Hutool 的定義:

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

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

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

Hutool 官方文檔:https://doc.hutool.cn/

1.包含模塊

Hutool 包含以下模塊:

模塊介紹
hutool-aopJDK 動態(tài)代理封裝,提供非 IOC 下的切面支持。
hutool-bloomFilter布隆過濾,提供一些 Hash 算法的布隆過濾。
hutool-cache簡單緩存實現(xiàn)。
hutool-core核心,包括 Bean 操作、日期、各種Util等。
hutool-cron定時任務(wù)模塊,提供類 Crontab 表達式的定時任務(wù)。
hutool-crypto加密解密模塊,提供對稱、非對稱和摘要算法封裝。
hutool-dbJDBC 封裝后的數(shù)據(jù)操作,基于 ActiveRecord思想。
hutool-dfa基于 DFA 模型的多關(guān)鍵字查找。
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-jsonJSON 實現(xiàn)。
hutool-captcha圖片驗證碼實現(xiàn)。
hutool-poi針對 POI 中 Excel 和 Word 的封裝。
hutool-socket基于 Java 的 NIO 和 AIO 的 Socket 封裝。
hutool-jwtJSON Web Token(JWT)封裝實現(xiàn)。

2.引入框架

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

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

3.常見使用場景

3.1 HTTP 請求類

在 Java 中,Apache 的 HttpClient 用的比較多,但是由于此包較為龐大,API 又比較難用,因此并不適用很多場景,而 Hutool 的 Hutool-http 針對 JDK 的 HttpUrlConnection 做一層封裝,簡化了 HTTPS 請求、文件上傳、Cookie 記憶等操作,使 Http 請求變得無比簡單。

具體使用,例如發(fā)送一個 GET 請求:

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

發(fā)送一個 POST 請求:

// POST 請求
HashMap<String, Object> param = new HashMap<>();
paramMap.put("city", "西安");
String result1 = HttpUtil.post("www.javacn.site", param);

3.2 生成 N 位隨機驗證碼

例如,生成手機驗證碼(4 位或 6 位),使用 Hutool 的這個功能就再也合適不過了,具體實現(xiàn)代碼如下:

// 生成 4 位隨機驗證碼
String verificationCode = RandomUtil.randomStringUpper(4);

3.3 拼音工具

Hutool 封裝了拼音的門面,用于兼容以下拼音庫:

  • TinyPinyin
  • JPinyin
  • Pinyin4j

和其它門面模塊類似,采用 SPI 方式識別所用的庫。例如你想用 Pinyin4j,只需引入 jar,Hutool 即可自動識別。

以下為 Hutool 支持的拼音庫的 pom 坐標,你可以選擇任意一個引入項目中,如果引入多個,Hutool 會按照以上順序選擇第一個使用。

TinyPinyin 依賴:

<dependency>
  <groupId>io.github.biezhi</groupId>
  <artifactId>TinyPinyin</artifactId>
  <version>2.0.3.RELEASE</version>
</dependency>

JPinyin 依賴:

<dependency>
  <groupId>com.belerweb</groupId>
  <artifactId>pinyin4j</artifactId>
  <version>2.5.1</version>
</dependency>

Pinyin4j 依賴:

<dependency>
  <groupId>com.github.stuxuhai</groupId>
  <artifactId>jpinyin</artifactId>
  <version>1.1.8</version>
</dependency>

① 獲取全部拼音

// 輸出結(jié)果:ni hao
String pinyin = PinyinUtil.getPinyin("你好", " "); 

這里定義的分隔符為空格,你也可以按照需求自定義分隔符,亦或者使用 "" 代表無分隔符。

② 獲取拼音首字母

// 輸出結(jié)果:h, s, d, y, g
String result = PinyinUtil.getFirstLetter("H是第一個", ", "); 

③ 自定義拼音庫(拼音引擎)

Pinyin4jEngine engine = new Pinyin4jEngine();
// 輸出結(jié)果:ni hao h
String pinyin = engine.getPinyin("你好h", " ");

3.4 計時器

Hutool 通過封裝 TimeInterval 實現(xiàn)計時器功能,即可以計算方法或過程執(zhí)行的時間。

具體使用如下:

TimeInterval timer = DateUtil.timer();
// todo:執(zhí)行具體業(yè)務(wù)
timer.interval();  // 花費毫秒數(shù)
timer.intervalRestart();// 返回花費時間,并重置開始時間
timer.intervalMinute(); // 花費分鐘數(shù)

也可以實現(xiàn)分組計時:

final TimeInterval timer = new TimeInterval();
// 分組 1
timer.start("1");
ThreadUtil.sleep(1000);
// 分組 2
timer.start("2");
ThreadUtil.sleep(2000);
// 打印時間
Console.log("Timer 1 took {} ms", timer.intervalMs("1"));
Console.log("Timer 2 took {} ms", timer.intervalMs("2"));

3.5 數(shù)字工具

NumberUtil 數(shù)字工具針對數(shù)學(xué)運算做工具性封裝。

我最喜歡使用它的保留小時和數(shù)字格式化,下面一起來看吧。

① 保留小數(shù)

保留小數(shù)的方法主要有兩種:

  • NumberUtil.round 方法主要封裝 BigDecimal 中的方法來保留小數(shù),返回 BigDecimal,這個方法更加靈活,可以選擇四舍五入或者全部舍棄等模式。
  • NumberUtil.roundStr 方法主要封裝 String.format 方法,舍棄方式采用四舍五入。

具體實現(xiàn)如下。

NumberUtil.round 方法使用:

double te1=123456.123456;
double te2=123456.128456;
Console.log(round(te1,4)); // 結(jié)果:123456.1235
Console.log(round(te2,4)); // 結(jié)果:123456.1285

NumberUtil.roundStr 方法使用:

double te1=123456.123456;
double te2=123456.128456;
Console.log(roundStr(te1,2));//結(jié)果:123456.12
Console.log(roundStr(te2,2));//結(jié)果:123456.13

② 時間格式化

針對 DecimalFormat.format 進行簡單封裝。按照固定格式對 double 或 long 類型的數(shù)字做格式化操作,具體實現(xiàn)如下:

long c = 299792458; // 光速
String format = NumberUtil.decimalFormat(",###", c); // 299,792,458

格式中主要以 # 和 0 兩種占位符號來指定數(shù)字長度。0 表示如果位數(shù)不足則以 0 填充,# 表示只要有可能就把數(shù)字拉上這個位置。

  • 0 -> 取一位整數(shù)。
  • 0.00 -> 取一位整數(shù)和兩位小數(shù)。
  • 00.000 -> 取兩位整數(shù)和三位小數(shù)。
  • # -> 取所有整數(shù)部分。
  • #.##% -> 以百分比方式計數(shù),并取兩位小數(shù)。
  • #.#####E0 -> 顯示為科學(xué)計數(shù)法,并取五位小數(shù)。
  • ,### -> 每三位以逗號進行分隔,例如:299,792,458。
  • 光速大小為每秒,###米 -> 將格式嵌入文本。

③ 校驗數(shù)字

  • NumberUtil.isNumber:是否為數(shù)字。
  • NumberUtil.isInteger:是否為整數(shù)。
  • NumberUtil.isDouble:是否為浮點數(shù)。
  • NumberUtil.isPrimes:是否為質(zhì)數(shù)。

④ 隨機數(shù)

  • NumberUtil.generateRandomNumber 生成不重復(fù)隨機數(shù) 根據(jù)給定的最小數(shù)字和最大數(shù)字,以及隨機數(shù)的個數(shù),產(chǎn)生指定的不重復(fù)的數(shù)組。
  • NumberUtil.generateBySet 生成不重復(fù)隨機數(shù) 根據(jù)給定的最小數(shù)字和最大數(shù)字,以及隨機數(shù)的個數(shù),產(chǎn)生指定的不重復(fù)的數(shù)組。

3.6 數(shù)據(jù)脫敏

在數(shù)據(jù)處理或清洗中,可能涉及到很多隱私信息的脫敏工作,因此Hutool針對常用的信息封裝了一些脫敏方法。

現(xiàn)階段支持的脫敏數(shù)據(jù)類型包括:

  • 用戶 id
  • 中文姓名
  • 身份證號
  • 座機號
  • 手機號
  • 地址
  • 電子郵件
  • 密碼
  • 中國大陸車牌,包含普通車輛、新能源車輛
  • 銀行卡

整體來說,所謂脫敏就是隱藏掉信息中的一部分關(guān)鍵信息,用*代替,自定義隱藏可以使用 StrUtil.hide 方法完成。

我們以身份證號碼為例:

// 5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);

對于約定俗成的脫敏,我們可以不用指定隱藏位數(shù),比如手機號:

// 180****1999
DesensitizedUtil.mobilePhone("18049531999");

當然還有一些簡單粗暴的脫敏,比如密碼,只保留了位數(shù)信息:

// **********
DesensitizedUtil.password("1234567890");

3.7 郵件發(fā)送工具

在 Java 中發(fā)送郵件主要依靠 javax.mail 包,但是由于使用比較繁瑣,因此 Hutool 針對其做了封裝  MailUtil,它的使用主要需要兩步:

  • 添加 Java Mail 依賴(因為 MailUtil 是對它的封裝)。
  • 編寫郵件發(fā)送代碼。

① 添加依賴

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

② 編寫發(fā)送代碼

// 發(fā)送普通文本郵件,最后一個參數(shù)可選是否添加多個附件
MailUtil.send("hutool@foxmail.com", "測試", "郵件來自磊哥測試", false);

// 發(fā)送 HTML 格式的郵件并附帶附件,最后一個參數(shù)可選是否添加多個附件:
MailUtil.send("hutool@foxmail.com", "測試", "<h1>郵件來自磊哥測試</h1>", true, FileUtil.file("d:/aaa.xml"));

// 群發(fā)郵件,可選 HTML 或普通文本,可選多個附件:
ArrayList<String> tos = CollUtil.newArrayList( 
    "person1@bbb.com", 
    "person2@bbb.com", 
    "person3@bbb.com", 
    "person4@bbb.com"); 
MailUtil.send(tos, "測試", "郵件來自磊哥群發(fā)測試", false);

3.8 布隆過濾器

布隆過濾器(英語:Bloom Filter)是 1970 年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數(shù)。布隆過濾器可以用于檢索一個元素是否在一個集合中。它的優(yōu)點是空間效率和查詢時間都遠遠超過一般的算法,缺點是有一定的誤識別率和刪除困難。

布隆過濾器的原理是,當一個元素被加入集合時,通過 K 個散列函數(shù)將這個元素映射成一個位數(shù)組中的 K 個點,把它們置為 1。檢索時,我們只要看看這些點是不是都是 1 就(大約)知道集合中有沒有它了:如果這些點有任何一個 0,則被檢元素一定不在;如果都是 1,則被檢元素很可能在。這就是布隆過濾器的基本思想。參考:https://www.cnblogs.com/z941030/p/9218356.html

布隆過濾器的具體使用如下:

// 初始化
BitMapBloomFilter filter = new BitMapBloomFilter(10);
filter.add("123");
filter.add("abc");
filter.add("ddd");

// 查找
filter.contains("abc")

以上就是java中Hutool工具類的常見使用場景詳解的詳細內(nèi)容,更多關(guān)于java Hutool的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot整合redis使用緩存注解詳解

    SpringBoot整合redis使用緩存注解詳解

    這篇文章主要介紹了SpringBoot整合redis使用緩存注解詳解,@Cacheable在方法執(zhí)行前判斷對應(yīng)緩存是否存在,如果存在直接返回緩存結(jié)果,否者執(zhí)行方法將結(jié)果緩存,適用于查詢類,需要的朋友可以參考下
    2024-01-01
  • 淺談Java高并發(fā)解決方案以及高負載優(yōu)化方法

    淺談Java高并發(fā)解決方案以及高負載優(yōu)化方法

    這篇文章主要介紹了淺談Java高并發(fā)解決方案以及高負載優(yōu)化方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • MyBatis異常-Property ''configLocation'' not specified, using default MyBatis Configuration

    MyBatis異常-Property ''configLocation'' not specified, using d

    今天小編就為大家分享一篇關(guān)于MyBatis異常-Property 'configLocation' not specified, using default MyBatis Configuration,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java中List集合及其實現(xiàn)類的方法詳解

    java中List集合及其實現(xiàn)類的方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于java中List集合及其實現(xiàn)類的方法介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習一下吧
    2019-06-06
  • SpringBoot解決BigDecimal傳到前端后精度丟失問題

    SpringBoot解決BigDecimal傳到前端后精度丟失問題

    這篇文章將通過示例詳細為大家介紹SpringBoot如何解決BigDecimal傳到前端后精度丟失問題,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-06-06
  • Spring之底層架構(gòu)核心概念Environment及用法詳解

    Spring之底層架構(gòu)核心概念Environment及用法詳解

    這篇文章主要介紹了Spring之底層架構(gòu)核心概念-Environment,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • JavaWeb實戰(zhàn)之開發(fā)網(wǎng)上購物系統(tǒng)(超詳細)

    JavaWeb實戰(zhàn)之開發(fā)網(wǎng)上購物系統(tǒng)(超詳細)

    這篇文章主要介紹了JavaWeb實戰(zhàn)之開發(fā)網(wǎng)上購物系統(tǒng)(超詳細),文中有非常詳細的代碼示例,對正在學(xué)習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring?Boot開發(fā)時Java對象和Json對象之間的轉(zhuǎn)換

    Spring?Boot開發(fā)時Java對象和Json對象之間的轉(zhuǎn)換

    在Spring?Boot開發(fā)中,我們經(jīng)常需要處理Java對象和Json對象之間的轉(zhuǎn)換,本文將介紹如何在Spring?Boot項目中實現(xiàn)Java對象和Json對象之間的轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • 消息隊列-kafka消費異常問題

    消息隊列-kafka消費異常問題

    這篇文章主要給大家介紹了關(guān)于kafka的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-07-07
  • 一文讓你徹底明白Java中的值傳遞和引用傳遞

    一文讓你徹底明白Java中的值傳遞和引用傳遞

    這篇文章主要給大家介紹了關(guān)于Java中值傳遞和引用傳遞的相關(guān)資料,值傳遞是指在調(diào)用函數(shù)時將實際參數(shù)復(fù)制一份傳遞到函數(shù)中,引用傳遞是指在調(diào)用函數(shù)時將實際參數(shù)的引用直接傳遞到函數(shù)中,需要的朋友可以參考下
    2023-10-10

最新評論

石台县| 得荣县| 宽甸| 宁晋县| 双桥区| 大荔县| 肥东县| 江津市| 黄浦区| 长沙市| 榆社县| 文成县| 山阳县| 营口市| 台东市| 红原县| 错那县| 新平| 台山市| 温宿县| 绥芬河市| 南华县| 康保县| 扶沟县| 永定县| 扎赉特旗| 宁夏| 瓮安县| 玉环县| 承德县| 台南县| 英山县| 彩票| 乃东县| 汨罗市| 深州市| 广河县| 隆子县| 绿春县| 青海省| 德令哈市|