Hutool是一個小而全的Java工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函數式語言般的優雅,讓Java語言也可以「甜甜的」。
Hutool的目標是使用一個工具方法代替一段複雜程式碼,從而最大限度的避免「複製貼上」程式碼的問題,徹底改變我們寫程式碼的方式。
以計算MD5為例:
-【以前
】開啟搜尋引擎 -> 搜「Java MD5加密」 -> 開啟某篇部落格-> 複製貼上 -> 改改好用
-【現在
】引入Hutool -> SecureUtil.md5()
Hutool的存在就是為了減少程式碼搜尋成本,避免網路上參差不齊的程式碼出現導致的bug。
一個Java基礎工具類,對檔案、流、加密解密、轉碼、正則、執行緒、XML等JDK方法進行封裝,組成各種Util工具類,同時提供以下元件:
你可以通過引入hutool-all方式引入所有模組,但還是不建議引入所有模組,因為絕大部分功能專案可能都用不上,建議只引入你需要的模組。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
另外個人覺得Hutool雖然工具很全,但是有些事情還是交給專業的框架來做,比如http請求,就建議用okhttp或者httpclient,匯入匯出用easyexcel。
下面介紹一些常用的工具類
Hutool 提供的功能實在太多,這裡只列舉一些我個人覺得比較實用的功能,供大家學習參考。
只要你需要用到型別轉換的,你都先別急著自己造輪子,可以先來這裡找找。
public static void main(String[] args) {
//1、Object 轉 數位
Object s = "123";
Integer bInt = Convert.toInt(s);
//如果給定的值為空,或者轉換失敗,返回預設值
Integer baInt = Convert.toInt("123a", 0);
//2、數位轉字串
String aStr = Convert.toStr(1);
//3、轉 BigDecimal
BigDecimal sbDecimal = Convert.toBigDecimal("123");
//4、金額轉為中文形式
String chinese = Convert.digitToChinese(12);
}
還有很多很多,只要你想到的這裡基本上都有。
public static void main(String[] args) {
//1、當前時間
Date date = DateUtil.date();
Date date2 = DateUtil.date(System.currentTimeMillis());
//2、當前時間字串,格式:yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();
//當前日期字串,格式:yyyy-MM-dd
String today = DateUtil.today();
//3、獲得月份,從0開始計數
int month = DateUtil.month(new Date());
//4、格式化後的字串 預設yyyy-MM-dd HH:mm:ss
String dateTime = DateUtil.formatLocalDateTime(LocalDateTime.now());
//格式化後的字串 指定格式型別。所以型別在DatePattern工具類也可以找 不用在手寫
String format = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_PATTERN);
//5、獲取某月的開始時間
DateTime dateTime1 = DateUtil.beginOfMonth(new Date());
//獲取昨天時間
DateTime yesterday = DateUtil.yesterday();
//6、計時,常用於記錄某段程式碼的執行時間,單位:毫秒
long spendMs = DateUtil.spendMs(111111111L);
}
這個數位工具在實際開發中還是蠻有用的,一般我們進行數位加減的時候,很容易因為資料為null,而報空指標異常。
這個工具類很好的幫我們避免這類問題的發生。
如下範例:
public static void main(String[] args) {
//1、數位相加 如果為空預設加0
BigDecimal decimal = BigDecimal.valueOf(10);
//返回10
BigDecimal add = NumberUtil.add(decimal, null);
}
看下這個工具類的常用方法
//1、相加,9 + null = 9
BigDecimal add(BigDecimal... values);
BigDecimal add(String... values);
//2、相減
BigDecimal sub(BigDecimal... values);
BigDecimal sub(String... values);
//3、相乘
BigDecimal mul(BigDecimal... values);
BigDecimal mul(String... values);
//4、相除,當發生除不盡的情況時,由scale指定精確度,後面的四捨五入
BigDecimal div(Number v1, Number v2, int scale);
BigDecimal div(String v1, String v2, int scale);
//5、保留固定位數小數
BigDecimal round(BigDecimal number, int scale);
String roundStr(String numberStr, int scale);
//6、格式化百分比: 0.23 -> 23%
String formatPercent(double number, int scale);
//7、字串是否為數位
boolean isNumber(CharSequence str);
//8、判斷String是否是整數
boolean isInteger(String s);
//9、生成不重複亂數 根據給定的最小數位和最大數位,以及亂數的個數
int[] generateRandomNumber(int begin, int end, int size);
//10、比較大小,引數1 > 引數2 返回true
boolean isGreater(BigDecimal bigNum1, BigDecimal bigNum2);
//11、取最大值
BigDecimal max(BigDecimal... numberArray);
//12、字串轉數位
BigDecimal toBigDecimal(String numberStr);
//13、空轉0
BigDecimal null2Zero(BigDecimal decimal);
public static void main(String[] args) {
String ID_18 = "119127189008245110";
//是否有效
boolean valid = IdcardUtil.isValidCard(ID_18);
//年齡
int age = IdcardUtil.getAgeByIdCard(ID_18);
//生日
String birth = IdcardUtil.getBirthByIdCard(ID_18);
//省份
String province = IdcardUtil.getProvinceByIdCard(ID_18);
}
public static void main(String[] args) {
//【中文姓名】只顯示第一個漢字,其他隱藏為2個星號,比如:李**
DesensitizedUtil.chineseName("張三");
//【身份證號】前1位 和後2位
DesensitizedUtil.idCardNum("33012345",1,2);
//【手機號碼】前三位,後4位元,其他隱藏,比如135****2210
DesensitizedUtil.mobilePhone("13712345678");
//【地址】只顯示到地區,不顯示詳細地址,比如:北京市海淀區****
DesensitizedUtil.address("北京市海淀區被順街道",4);
//還有 郵箱、車牌、郵箱、銀行卡、密碼......
}
public static void main(String[] args) {
//1、判斷字串是否全部為字母組成,包括大寫和小寫字母和漢字
Validator.isLetter("小小寶貝");
//2、驗證該字串是否是數位
Validator.isNumber("123");
//3、驗證是否為可用郵箱地址
Validator.isEmail("[email protected]");
//4、驗證是否為手機號碼(中國)
Validator.isMobile("15612345678");
//5、驗證是否為身份證號碼(支援18位元、15位和港澳臺的10位)
Validator.isCitizenId("330127210006111234");
//6、驗證是否為中國車牌號
Validator.isPlateNumber("小A.88888");
//7、驗證是否都為漢字
Validator.isChinese("小A");
//8、檢查給定的數位是否在指定範圍內
Validator.isBetween(3,2,1);
}
用java8的Stream流能夠非常簡化我們的程式碼,這個工具類相當於對java8的Stream的寫法進一步簡寫。
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(1, 1, 1, "張三"));
list.add(new Student(1, 1, 2, "李四"));
list.add(new Student(1, 1, 3, "王五"));
//1、學生id -> 學生物件
Map<Long, Student> map = CollStreamUtil.toIdentityMap(list, Student::getStudentId);
//2、學生id -> 學生名稱
Map<Long, String> map1 = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);
//3、學生id -> 學生集合
Map<Long, List<Student>> map2 = CollStreamUtil.groupByKey(list, Student::getClassId);
//4、獲取使用者名稱集合
List<String> list1 = CollStreamUtil.toList(null, Student::getName);
}
當然上面只是展示了一小部分工具,具體的可以看官方檔案,寫的清清楚楚,明明白白哇
官方檔案
: https://www.hutool.cn/docs/
宣告: 公眾號如需轉載該篇文章,發表文章的頭部一定要 告知是轉至公眾號: 後端元宇宙。同時也可以問本人要markdown原稿和原圖片。其它情況一律禁止轉載!