摘要:打印字符串我在人民廣場吃著炸雞打印字符串模板我在吃著炸雞人民廣場我在人民廣場吃著炸雞打印數組日志工具封裝的日志工廠兼容了各大日志框架,使用起來也非常簡便。
無論在開發什么項目,我們都會用到N多種工具類,DateUtils、FileUtils、StringUtils等等… 開發一個新項目就需要把這些“輪子”復制一次,雖然只是Ctrl+C/V,但是也麻煩了一些,而且也會讓我們的Utils包顯得賊臃腫?
那么怎么解決這個問題呢?稍安勿躁,接下來就該請我們的主角閃亮登場了(●’?’●) —— Hutool - A set of tools that keep Java sweet
在Hutool官網中有這么一段話:
Hutool是一個小而全的Java工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函數式語言般的優雅,讓Java語言也可以“甜甜的”。
Hutool中的工具方法來自每個用戶的精雕細琢,它涵蓋了Java開發底層代碼中的方方面面,它既是大型項目開發中解決小問題的利器,也是小型項目中的效率擔當。
Maven項目引入Hutool是非常簡單的,直接在項目的pom.xml的dependencies中加入?即可
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.16</version></dependency>
Hutool的設計思想是盡量減少重復的定義,讓項目中的util這個package盡量少。
以前在開發的時候我們總是打開百度搜XXX工具類,在一篇博客中找到自己所需的代碼復制粘貼,然后修修補補讓它變得更好用;現在有了Hutool,我們只需要直接使用就ok了,是不是很簡單O(∩_∩)O
下面就介紹一下開發中經常用到的一些工具類~
P.S. 其實是因為Hutool中包含的工具太多了,我實在是寫不下來(????)
JDK中自帶的Date工具不太好用,Hutool的日期工具類用起來就方便多了
先來個獲取當前日期
public static void main(String[] args) { Date date = DateUtil.date(); System.out.println("date = " + date); }
我們會發現它直接返回的是yyyy-MM-dd HH:mm:ss格式的日期,我們看一下date()方法的源碼
date()方法返回的其實是DateTime,它繼承自 Date 對象,重寫了toString() 方法,返回 yyyy-MM-dd HH:mm:ss 格式的字符串。
咱們再試試字符串轉日期:
parse()方法會自動識別一些常用的格式,比如說:
最人性化的一點是,它可以識別中文格式:年月日時分秒
public static void main(String[] args) { String dateStr = "2021年11月22日 10時32分07秒"; Date date = DateUtil.parse(dateStr); System.out.println("date = " + date); }
再來說說計算時間差
public static void main(String[] args) { String dateStr1 = "2021-11-22 10:32:07"; Date date1 = DateUtil.parse(dateStr1); String dateStr2 = "2021-11-22 10:44:34"; Date date2 = DateUtil.parse(dateStr2); long betweenDay = DateUtil.between(date1, date2, DateUnit.MS); String formatBetween = DateUtil.formatBetween(betweenDay, BetweenFormatter.Level.SECOND); System.out.println("formatBetween = " + formatBetween); }
輸入:formatBetween = 12分27秒
再說一個有意思的功能,給定一個日期,可以輸出生肖和星座?
我是1996年9月11日出生的,就用我的出生日期來測試一下
public static void main(String[] args) { String zodiac = DateUtil.getZodiac(9, 11); System.out.println("zodiac = " + zodiac); String chineseZodiac = DateUtil.getChineseZodiac(1996); System.out.println("chineseZodiac = " + chineseZodiac); }
P.S. 這里需要注意一下哦~ DateUtil.getZodiac()方法中月份是從0開始計算的,月份參數輸入的9,其實代表的是10月,所以就需要改成DateUtil.getZodiac(8, 11) 才會獲取生日為9月11號的星座~
Hutool中的字符串工具類StrUtil和Apache Commons Lang包中的StringUtils就比較類似了,這里就說一個比較有意思的方法
public static void main(String[] args) { String template = "我叫{},我在{}市"; String str = StrUtil.format(template, "liziye", "石家莊"); System.out.println("str = " + str); }
不知道有沒有小伙伴覺得這個功能有點眼熟~ 是不是短信接口模板挺像的?
類型轉換在Java開發中很常見,就比如說從HttpRequest中獲取參數的時候,前端頁面傳遞的是整型,但后端只能先獲取到字符串,然后再調用 parseXXX() 方法進行轉換,還要在加上校驗、判空,就很繁瑣。
Hutool的Convert類可以簡化這個操作,可以將任意可能的類型轉換為指定類型。以轉換Int型參數為例,Convert.toInt(Object value, Integer defaultValue)方法有兩個參數,第一個參數就不用說了,傳遞的是待轉換參數,第二個參數的含義是:在轉換失敗時返回一個給定的默認值。(第二個參數可有可無)
我們再來模擬一下轉換失敗的情況
public static void main(String[] args) { String param = "qweqweqeqwe"; int paramIntDefault = Convert.toInt(param, 0); System.out.println("paramIntDefault = " + paramIntDefault); }
IO 操作包括讀和寫,應用的場景主要包括網絡操作和文件操作,原生的 Java類庫區分字符流和字節流,字節流InputStream和OutputStream就有N多種,用的時候真是頭疼。
Hutool封裝了流操作工具類IoUtil、文件讀寫操作工具類FileUtil、文件類型判斷工具類FileTypeUtil等等,讓流操作邊得更簡單更容易。(這里就不作代碼演示了,這演示起來就多了?原諒我想偷個懶)
在開發的時候避免不了有表單的存在,后端通常需要對表單提交過來的數據進行驗證。Hutool封裝的Validator類可以進行很多有效的條件驗證,比如是不是郵箱、是不是手機號碼、是不是中文…
在Java中,對文件、文件夾進行壓縮是一件很繁瑣的事情,Hutool封裝的 ZipUtil工具就極大的降低了解壓縮的復雜度,可以使用一個方法搞定壓縮和解壓縮,并且自動處理文件和目錄的問題。
ZipUtil.zip(String srcPath, String zipPath)
ZipUtil.unzip(String zipFilePath, @Nullable String outFileDir)
開發的過程中經常需要使用System.out打印結果,但是一些復雜的對象不支持直接打印,比如說打印數組的時候就需要先用toString方法轉換為字符串再進行打印。
Hutool 封裝的Console類借鑒了JS中的 console.log(),讓打印也變成了一件非常簡單的事。
public static void main(String[] args) { // 打印字符串 Console.log("我在人民廣場吃著炸雞~"); // 打印字符串模板 Console.log("我在{}吃著炸雞","人民廣場"); String [] str = {"我","在","人民廣場","吃著","炸雞"}; // 打印數組 Console.log(str); }
Hutool封裝的日志工廠LogFactory兼容了各大日志框架,使用起來也非常簡便。
/** * @program: HuTool工具類演示 * @description: HuToolTest * @author: 莊霸.liziye * @create: 2021-11-22 10:29 **/public class HuToolTest { private static final Log log = LogFactory.get(); public static void main(String[] args) { log.debug("我在人民廣場吃著炸雞"); log.info("我在人民廣場吃著炸雞"); }}
如果不想創建Log對象的話,也可以使用StaticLog(一個提供了靜態方法的日志類)
Hutool中的類庫還有很多,尤其是一些對第三方類庫的進一步封裝,比如郵件工具 MailUtil,二維碼工具 QrCodeUtil,緩存工具CacheUtil ,圖片工具ImgUtil等等,本文就是簡單的介紹一下Hutool,讓各位小伙伴對其有一個初步的了解,如果想深入學習Hutool,請移步至 Hutool官網 O(∩_∩)O
本人經驗有限,有些地方可能講的沒有特別到位,如果您在閱讀的時候想到了什么問題,歡迎在評論區留言,我們后續再一一探討??
如果文章中有錯誤,歡迎大家留言指正;若您有更好、更獨到的理解,歡迎您在留言區留下您的寶貴想法。
你在被打擊時,記起你的珍貴,抵抗惡意;
你在迷茫時,堅信你的珍貴,拋開蜚語;
愛你所愛 行你所行 聽從你心 無問東西
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124436.html
摘要:特別是在可能返回空的集合的情況下務必返回一個內容為空的集合而不是一個。對于集合類型,應該在任何允許的情況下使用的或者類。框架框架是你部署代碼的一個很好地方式,其中較好的選擇有與。包含了大量與文件相關的操作。 原文地址:這里 Java是目前世界上最流行的編程語言之一,但是并不是所有人都樂于使用它。不過Java其實是一個還不錯的語言,也別是自從Java 8正式發布之后,所以我決定將我的一些...
Testing framework both use describe, it functions Jasmine(Behavior-Driven JavaScript) spyOn(User, save) jasmine.createSpy() the Jasmine framework has almost everything built into it including assertio...
摘要:打印出個體檢查它的適應度是否有效這個個體打印出來了。這個適應度值是通過設置值和元祖關聯。適應度值被刪除了,因為它們不再和這個個體相關了因為變異了嘛。如上面所述,這個變異算子只是變異并且只是變異一個個體,它也不對適應度的無效負責或者其它。 Before starting with complex algorithms, we will see some basics of DEAP. F...
閱讀 1607·2021-11-23 09:51
閱讀 1177·2019-08-30 13:57
閱讀 2255·2019-08-29 13:12
閱讀 2011·2019-08-26 13:57
閱讀 1191·2019-08-26 11:32
閱讀 978·2019-08-23 15:08
閱讀 699·2019-08-23 14:42
閱讀 3079·2019-08-23 11:41