hutool使用
官網:https://hutool.cn/docs/#/
就是很多工具類匯合到一起,更加方便實用!
jar
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.3</version>
</dependency>
痛點
在Java開發中我們要面對各種各樣的類型轉換問題,尤其是從命令行獲取的用戶參數、從HttpRequest獲取的Parameter等等,這些參數類型多種多樣,我們怎麼去轉換他們呢?常用的辦法是先整成String,然後調用XXX.parseXXX方法,還要承受轉換失敗的風險,不得不加一層try catch,這個小小的過程混跡在業務代碼中會顯得非常難看和臃腫。
工具類們
只簡單寫了幾種。
Convert類
Convert類可以說是一個工具方法類,裏面封裝了針對Java常見類型的轉換,用於簡化類型轉換。Convert類中大部分方法爲toXXX,參數爲Object,可以實現將任意可能的類型轉換爲指定類型。同時支持第二個參數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、轉換爲指定類型數組:
String[] b = { "1", "2", "3", "4" };
//結果爲Integer數組
Integer[] intArray = Convert.toIntArray(b);
long[] c = {1,2,3,4,5};
//結果爲Integer數組
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);
其它類型轉換
16進制(Hex)
1、轉爲16進制(Hex)字符串
String a = "我是一個小小的可愛的字符串";
//結果:"e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2"
String hex = Convert.toHex(a, CharsetUtil.CHARSET_UTF_8);
2、將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);
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);
時間單位轉換
long a = 4535345;
//結果爲:75
long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);
金額大小寫轉換
double a = 67556.32;
//結果爲:"陸萬柒仟伍佰伍拾陸元叄角貳分"
String digitUppercase = Convert.digitToChinese(a);
注意 轉換爲大寫只能精確到分(小數點兒後兩位),之後的數字會被忽略。
日期時間
Date、long、Calendar之間的相互轉換
//當前時間
Date date = DateUtil.date();
//當前時間
Date date2 = DateUtil.date(Calendar.getInstance());
//當前時間
Date date3 = DateUtil.date(System.currentTimeMillis());
//當前時間字符串,格式:yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();
//當前日期字符串,格式:yyyy-MM-dd
String today= DateUtil.today();
字符串轉日期
DateUtil.parse方法會自動識別一些常用格式,包括:
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss.SSS
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
我們也可以使用自定義日期格式轉化:
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
格式化日期輸出
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
//結果 2017/03/01
String format = DateUtil.format(date, "yyyy/MM/dd");
//常用格式的格式化,結果:2017-03-01
String formatDate = DateUtil.formatDate(date);
//結果:2017-03-01 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);
//結果:00:00:00
String formatTime = DateUtil.formatTime(date);
身份證工具-IdcardUtil
IdcardUtil從3.0.4版本起加入Hutool工具家族,請升級至此版本以上可使用。
工具中主要的方法包括:
isValidCard 驗證身份證是否合法
convert15To18 身份證15位轉18位
getBirthByIdCard 獲取生日
getAgeByIdCard 獲取年齡
getYearByIdCard 獲取生日年
getMonthByIdCard 獲取生日月
getDayByIdCard 獲取生日天
getGenderByIdCard 獲取性別
getProvinceByIdCard 獲取省份
線程工具 ThreadUtil
ThreadUtil.execute
直接在公共線程池中執行線程
ThreadUtil.newExecutor
獲得一個新的線程池
ThreadUtil.excAsync
執行異步方法
ThreadUtil.newCompletionService
創建CompletionService,調用其submit方法可以異步執行多個任務,最後調用take方法按照完成的順序獲得其結果。若未完成,則會阻塞。
ThreadUtil.newCountDownLatch
新建一個CountDownLatch,一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。
ThreadUtil.sleep
掛起當前線程,是Thread.sleep的封裝,通過返回boolean值表示是否被打斷,而不是拋出異常。
圖片工具-ImgUtil等等…