日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

效率工具:Hutool 嘎嘎香,被秀到了!

發(fā)布時(shí)間:2023/12/24 windows 36 coder
生活随笔 收集整理的這篇文章主要介紹了 效率工具:Hutool 嘎嘎香,被秀到了! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

先來看官方對(duì)于 Hutool 的定義:

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

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

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

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

1.包含模塊

Hutool 包含以下模塊:

模塊 介紹
hutool-aop JDK 動(dòng)態(tài)代理封裝,提供非 IOC 下的切面支持。
hutool-bloomFilter 布隆過濾,提供一些 Hash 算法的布隆過濾。
hutool-cache 簡(jiǎn)單緩存實(shí)現(xiàn)。
hutool-core 核心,包括 Bean 操作、日期、各種Util等。
hutool-cron 定時(shí)任務(wù)模塊,提供類 Crontab 表達(dá)式的定時(shí)任務(wù)。
hutool-crypto 加密解密模塊,提供對(duì)稱、非對(duì)稱和摘要算法封裝。
hutool-db JDBC 封裝后的數(shù)據(jù)操作,基于 ActiveRecord思想。
hutool-dfa 基于 DFA 模型的多關(guān)鍵字查找。
hutool-extra 擴(kuò)展模塊,對(duì)第三方封裝(模板引擎、郵件、Servlet、二維碼、Emoji、FTP、分詞等)。
hutool-http 基于 HttpUrlConnection 的 Http 客戶端封裝。
hutool-log 自動(dòng)識(shí)別日志實(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 針對(duì) POI 中 Excel 和 Word 的封裝。
hutool-socket 基于 Java 的 NIO 和 AIO 的 Socket 封裝。
hutool-jwt JSON Web Token(JWT)封裝實(shí)現(xiàn)。

2.引入框架

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

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

3.常見使用場(chǎng)景

3.1 HTTP 請(qǐng)求類

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

具體使用,例如發(fā)送一個(gè) GET 請(qǐng)求:

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

發(fā)送一個(gè) POST 請(qǐng)求:

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

3.2 生成 N 位隨機(jī)驗(yàn)證碼

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

// 生成 4 位隨機(jī)驗(yàn)證碼
String verificationCode = RandomUtil.randomStringUpper(4);

3.3 拼音工具

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

  1. TinyPinyin
  2. JPinyin
  3. Pinyin4j

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

以下為 Hutool 支持的拼音庫的 pom 坐標(biāo),你可以選擇任意一個(gè)引入項(xiàng)目中,如果引入多個(gè),Hutool 會(huì)按照以上順序選擇第一個(gè)使用。

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是第一個(gè)", ", "); 

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

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

3.4 計(jì)時(shí)器

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

具體使用如下:

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

也可以實(shí)現(xiàn)分組計(jì)時(shí):

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

3.5 數(shù)字工具

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

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

① 保留小數(shù)

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

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

具體實(shí)現(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

② 時(shí)間格式化

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

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

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

  • 0 -> 取一位整數(shù)。
  • 0.00 -> 取一位整數(shù)和兩位小數(shù)。
  • 00.000 -> 取兩位整數(shù)和三位小數(shù)。
  • # -> 取所有整數(shù)部分。
  • .##% -> 以百分比方式計(jì)數(shù),并取兩位小數(shù)。

  • .#####E0 -> 顯示為科學(xué)計(jì)數(shù)法,并取五位小數(shù)。

  • ,### -> 每三位以逗號(hào)進(jìn)行分隔,例如:299,792,458。
  • 光速大小為每秒,###米 -> 將格式嵌入文本。

③ 校驗(yàn)數(shù)字

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

④ 隨機(jī)數(shù)

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

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

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

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

  1. 用戶 id
  2. 中文姓名
  3. 身份證號(hào)
  4. 座機(jī)號(hào)
  5. 手機(jī)號(hào)
  6. 地址
  7. 電子郵件
  8. 密碼
  9. *車牌,包含普通車輛、新能源車輛
  10. 銀行卡

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

我們以身份證號(hào)碼為例:

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

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

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

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

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

3.7 郵件發(fā)送工具

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

  1. 添加 Java Mail 依賴(因?yàn)?MailUtil 是對(duì)它的封裝)。
  2. 編寫郵件發(fā)送代碼。

① 添加依賴

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

② 編寫發(fā)送代碼

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

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

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

3.8 布隆過濾器

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

布隆過濾器的原理是,當(dāng)一個(gè)元素被加入集合時(shí),通過 K 個(gè)散列函數(shù)將這個(gè)元素映射成一個(gè)位數(shù)組中的 K 個(gè)點(diǎn),把它們置為 1。檢索時(shí),我們只要看看這些點(diǎn)是不是都是 1 就(大約)知道集合中有沒有它了:如果這些點(diǎn)有任何一個(gè) 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")

小結(jié)

不是代碼寫不起,而是 Hutool 更有性價(jià)比。正如官方描述的那樣,使用 Hutool 會(huì)有種甜甜的感覺,磨刀不誤砍柴工,Hutool 用上之后代碼嘎嘎香,快去試試吧~

本文已收錄到我的面試小站 www.javacn.site,其中包含的內(nèi)容有:Redis、JVM、并發(fā)、并發(fā)、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設(shè)計(jì)模式、消息隊(duì)列等模塊。

總結(jié)

以上是生活随笔為你收集整理的效率工具:Hutool 嘎嘎香,被秀到了!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热在线观看精品 | 国产精品无码久久久久久电影 | 波多野结衣黄色网址 | 亚洲第一区av | 国内精品视频一区 | 日韩在线免费观看视频 | 日韩一区av在线 | 在线h网站 | 无码一区二区三区在线观看 | 久久久久99精品成人片 | 女子spa高潮呻吟抽搐 | 亚洲特级片 | 奇米av在线| 91网站视频在线观看 | 日本一区二区三区久久久久 | 丰满熟女一区二区三区 | 最新国产拍偷乱偷精品 | 免费av网页 | 欧美性猛交xxxⅹ富婆 | 91精品人妻互换一区二区 | 欧美日韩卡一卡二 | 暖暖免费观看日本版 | 中文字幕乱码一二三区 | 国产aⅴ精品一区二区果冻 台湾性生生活1 | 一区中文字幕 | 风韵少妇性饥渴推油按摩视频 | 色爽av | 日韩涩 | 影音先锋在线看片资源 | 中文字幕av免费在线观看 | 一区二区三区四区国产精品 | 成人做爰66片免费看网站 | 国产成人欧美一区二区三区的 | www.欧美视频| 久久久久一 | 日本人六九视频 | 同心兄弟| 在线中出 | www日韩av | 999免费视频 | 国产亚洲精品久久久久久打不开 | 日韩精品欧美精品 | 色国产精品 | 成人1区2区3区 | 国产精品乱码 | 久久久最新 | 夜夜夜网| 黄色片免费网站 | 黄色理伦| 亚洲视频导航 | 粉嫩视频在线观看 | 久久久人妻无码一区二区 | 中文字幕亚洲在线观看 | 亚洲欧美日韩国产一区二区三区 | 久久综合网址 | 亚洲黄色小说视频 | 在线看a级片| 美女视频黄色 | 欧美午夜精品 | 黄色激情网址 | 欧美浮力影院 | 欧美一区二区三区四区在线观看 | 视频久久 | 超碰在线a | 国产91精品欧美 | 亚洲不卡中文字幕 | 久久中文字幕电影 | 久久久社区 | 中文字幕无码乱码人妻日韩精品 | 四虎av在线 | 国产小视频在线观看 | 色播激情| 亚洲天堂福利 | 久久亚洲在线 | 日韩在线观看精品 | 日本高清不卡视频 | 毛片综合 | 中文字幕+乱码+中文 | 舐め犯し波多野结衣在线观看 | 欧美性猛交一区二区三区精品 | 欧美黑人疯狂性受xxxxx喷水 | 久久r精品 | 黄色avv | 日韩性xx | 精品少妇一区二区三区在线观看 | 中文字幕人妻一区二区三区 | 亚洲欧洲一区二区在线观看 | 国产精品一二区在线观看 | 美女诱惑av| 国产一区二区精品在线观看 | 人妻互换一区二区三区四区五区 | 精品一区二区亚洲 | 97精品人妻一区二区三区香蕉 | 欧美偷拍视频 | 91啪国产在线 | 午夜免费在线观看 | 午夜激情视频网 | 老司机av影院| 久久久久99精品国产片 |