Java 常用工具類匯總:15 個輪子幫你節(jié)省 80% 開發(fā)時間
還在重復寫日期格式化、字符串處理的代碼?別人用工具類一行搞定的事,你卻要堆十幾行冗余代碼?別再做 “重復造輪子” 的傻事了!今天這篇文章,我整理了 Java 開發(fā)中最常用的 15 個工具類,每個工具類都附帶真實業(yè)務場景的代碼示例,看完讓你開發(fā)效率直接翻倍,從此告別加班!
一、字符串工具類:告別 String 操作的繁瑣
1. Apache Commons Lang3 - StringUtils
字符串處理的 “瑞士軍刀”,解決了原生 String 類的諸多痛點,比如判斷空字符串、拼接、截取等。
// 1. 判斷字符串是否為空(避免 null 導致的空指針)
StringUtils.isEmpty(null); // true
StringUtils.isEmpty(""); // true
StringUtils.isEmpty(" "); // false(注意:空格不算空)
StringUtils.isBlank(" "); // true(isBlank 會忽略空格)
// 2. 安全拼接字符串(避免 null 被當成"null"處理)
String name = null;
String result = StringUtils.join("Hello, ", name, "!"); // 結果:"Hello, !"
// 原生 String 拼接會得到"Hello, null!"
// 3. 截取字符串(超出長度時不會報錯)
StringUtils.substring("abcdef", 2, 4); // "cd"
StringUtils.substring("abc", 5); // ""(超出范圍返回空串)
使用場景:表單驗證、接口參數(shù)處理、日志拼接等,幾乎所有涉及字符串的地方都能用。
2. Google Guava - Strings
Guava 庫中的字符串工具類,補充了很多實用功能,比如重復字符串、填充字符串等。
// 1. 重復生成字符串
Strings.repeat("ab", 3); // "ababab"
// 2. 左右填充(常用于格式化輸出)
Strings.padStart("123", 5, '0'); // "00123"(左填充到5位,不足補0)
Strings.padEnd("123", 5, '0'); // "12300"(右填充)
// 3. 檢查字符串是否為 null 或空
Strings.isNullOrEmpty(""); // true
二、日期時間工具類:輕松搞定時間處理
3. Java 8 原生 - LocalDateTime + DateTimeFormatter
JDK 8 新增的日期時間類,線程安全且易用,徹底替代 SimpleDateFormat。
// 1. 格式化日期(線程安全)
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = now.format(formatter); // "2025-07-07 15:30:20"
// 2. 解析字符串為日期
LocalDateTime parsed = LocalDateTime.parse("2025-07-07 15:30:20", formatter);
// 3. 日期計算(加/減天數(shù)、月份)
LocalDateTime tomorrow = now.plusDays(1);
LocalDateTime lastMonth = now.minusMonths(1);
為什么不用 SimpleDateFormat?
SimpleDateFormat 是線程不安全的,多線程環(huán)境下會出各種詭異的 bug,而 DateTimeFormatter 是線程安全的,可放心使用。
4. Apache Commons Lang3 - DateUtils
兼容舊版本 JDK 的日期工具類,處理 Date 類型很方便。
// 1. 日期加減
Date date = new Date();
Date nextWeek = DateUtils.addWeeks(date, 1); // 加一周
Date lastYear = DateUtils.addYears(date, -1); // 減一年
// 2. 判斷日期是否在范圍內(nèi)
Date start = DateUtils.parseDate("2025-01-01", "yyyy-MM-dd");
Date end = DateUtils.parseDate("2025-12-31", "yyyy-MM-dd");
boolean isBetween = DateUtils.isSameDay(date, start) ||
(date.after(start) && date.before(end));
三、集合工具類:簡化集合操作
5. Apache Commons Collections4 - CollectionUtils
集合操作的利器,解決了空集合判斷、集合合并、過濾等問題。
// 1. 安全操作集合(避免對 null 集合調(diào)用方法)
List<String> list = null;
CollectionUtils.isEmpty(list); // true
CollectionUtils.isNotEmpty(list); // false
// 2. 合并兩個集合(自動過濾 null 集合)
List<String> list1 = Arrays.asList("a", "b");
List<String> list2 = null;
CollectionUtils.union(list1, list2); // 結果:["a", "b"]
// 3. 過濾集合元素
CollectionUtils.filter(list1, s -> s.startsWith("a")); // 過濾后:["a"]
避坑點:原生集合調(diào)用 addAll(null) 會拋空指針,而 CollectionUtils.addAll() 會安全處理。
6. Google Guava - Lists / Sets / Maps
Guava 提供的集合工具類,創(chuàng)建集合更簡潔,還能做集合轉換、分割等。
// 1. 簡化集合創(chuàng)建
List<String> list = Lists.newArrayList("a", "b", "c");
Set<Integer> set = Sets.newHashSet(1, 2, 3);
Map<String, Integer> map = Maps.newHashMap();
// 2. 分割集合(分頁場景常用)
List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4, 5);
List<List<Integer>> partitioned = Lists.partition(numbers, 2); // 分割為 [[1,2], [3,4], [5]]
// 3. 集合交集/并集/差集
Set<Integer> setA = Sets.newHashSet(1, 2, 3);
Set<Integer> setB = Sets.newHashSet(3, 4, 5);
Sets.intersection(setA, setB); // 交集:[3]
Sets.union(setA, setB); // 并集:[1,2,3,4,5]
Sets.difference(setA, setB); // 差集:[1,2]
四、IO 工具類:文件操作不再繁瑣
7. Apache Commons IO - FileUtils
文件操作的 “天花板”,一行代碼搞定文件讀寫、復制、刪除等。
// 1. 讀取文件內(nèi)容(自動處理編碼和流關閉)
List<String> lines = FileUtils.readLines(new File("test.txt"), StandardCharsets.UTF_8);
// 2. 寫入文件(自動創(chuàng)建父目錄)
FileUtils.writeStringToFile(new File("output.txt"), "Hello", StandardCharsets.UTF_8);
// 3. 復制文件/目錄(支持跨磁盤)
FileUtils.copyFile(new File("a.txt"), new File("b.txt"));
FileUtils.copyDirectory(new File("dir1"), new File("dir2"));
// 4. 遞歸刪除目錄(比原生 File.delete() 更強大)
FileUtils.deleteDirectory(new File("temp"));
對比原生 IO:用原生代碼實現(xiàn)文件復制需要 20 行以上,而 FileUtils 一行搞定,還能自動處理異常和資源關閉。
8. Google Guava - Files
Guava 的文件工具類,補充了一些實用功能,比如觸摸文件、移動文件等。
// 1. 創(chuàng)建或更新文件最后修改時間(類似 Linux 的 touch 命令)
Files.touch(new File("empty.txt"));
// 2. 移動文件(支持覆蓋)
Files.move(new File("a.txt"), new File("b.txt"), StandardCopyOption.REPLACE_EXISTING);
// 3. 讀取文件為字符串
String content = Files.toString(new File("test.txt"), StandardCharsets.UTF_8);
五、加密工具類:安全處理敏感數(shù)據(jù)
9. Apache Commons Codec - DigestUtils
加密解密工具類,支持 MD5、SHA、Base64 等常用算法。
// 1. MD5 加密(返回 32 位小寫哈希)
String md5 = DigestUtils.md5Hex("123456"); // "e10adc3949ba59abbe56e057f20f883e"
// 2. SHA-256 加密
String sha256 = DigestUtils.sha256Hex("123456");
// 3. Base64 編碼/解碼
String base64Encoded = Base64.encodeBase64String("hello".getBytes());
byte[] decoded = Base64.decodeBase64(base64Encoded); // 解碼為"hello"
使用場景:密碼加密存儲、接口簽名驗證、數(shù)據(jù)傳輸加密等。
10. Hutool - SecureUtil
國產(chǎn)工具類庫 Hutool 中的加密工具,封裝更簡潔,支持更多算法。
// 1. 對稱加密(AES)
String content = "敏感數(shù)據(jù)";
String key = "1234567890abcdef"; // 16位密鑰
String encrypt = SecureUtil.aes(key.getBytes()).encryptHex(content);
String decrypt = SecureUtil.aes(key.getBytes()).decryptStr(encrypt);
// 2. 生成隨機鹽值(用于密碼加密)
String salt = SecureUtil.generateSalt(8); // 8位隨機鹽
六、其他高頻工具類
11. Java 原生 - Objects
JDK 7 新增的工具類,處理對象的 equals、hashCode、非空判斷等。
// 1. 安全比較兩個對象(避免 null 導致的空指針)
String a = null;
String b = "abc";
Objects.equals(a, b); // false(原生 a.equals(b) 會拋空指針)
// 2. 生成哈希碼(多個字段組合)
int hashCode = Objects.hash("name", 25, true);
// 3. 檢查對象是否為 null(為空則拋異常)
Objects.requireNonNull(user, "用戶對象不能為空");
12. Apache Commons Lang3 - ArrayUtils
數(shù)組操作工具類,解決數(shù)組拼接、擴容、查找等問題。
// 1. 數(shù)組判空
String[] arr = null;
ArrayUtils.isEmpty(arr); // true
ArrayUtils.isNotEmpty(arr); // false
// 2. 數(shù)組拼接
int[] arr1 = {1, 2};
int[] arr2 = {3, 4};
int[] merged = ArrayUtils.addAll(arr1, arr2); // [1,2,3,4]
// 3. 數(shù)組擴容
int[] expanded = ArrayUtils.resize(arr1, 5); // [1,2,0,0,0]
13. Hutool - DateUtil
Hutool 中的日期工具類,兼容新舊日期類,功能全面。
// 1. 格式化日期(支持各種格式)
String dateStr = DateUtil.format(new Date(), "yyyy年MM月dd日 HH:mm:ss");
// 2. 計算兩個日期差
Date date1 = DateUtil.parse("2025-01-01");
Date date2 = DateUtil.parse("2025-01-10");
long days = DateUtil.between(date1, date2, DateUnit.DAY); // 9天
// 3. 獲取指定日期(比如上個月第一天)
Date lastMonthFirstDay = DateUtil.beginOfMonth(DateUtil.lastMonth());
14. Google Guava - Preconditions
參數(shù)校驗工具類,讓方法入?yún)⑿r灨啙崱?/p>
public void createUser(String name, int age) {
// 校驗參數(shù),不滿足則拋異常
Preconditions.checkNotNull(name, "用戶名不能為空");
Preconditions.checkArgument(age > 0 && age < 150, "年齡必須在1-150之間");
Preconditions.checkState(age >= 18, "未滿18歲不能創(chuàng)建賬號");
}
優(yōu)勢:比手動寫 if-else 校驗代碼減少 50% 行數(shù),異常信息更清晰。
15. Apache Commons Validator - UrlValidator / EmailValidator
數(shù)據(jù)校驗工具類,支持 URL、郵箱、手機號等格式驗證。
// 1. 驗證郵箱格式
boolean isEmail = EmailValidator.getInstance().isValid("test@example.com");
// 2. 驗證 URL 格式
UrlValidator urlValidator = new UrlValidator();
boolean isUrl = urlValidator.isValid("https://www.example.com");
為什么用工具類能節(jié)省 80% 時間?
這些工具類就像 “預制菜”,幫你做好了最繁瑣的基礎工作,讓你專注于核心業(yè)務邏輯:
- 減少重復代碼:一個工具類方法頂 10 行原生代碼
- 避免低級錯誤:處理了 null、邊界值等特殊情況,減少 bug
- 提高可讀性:StringUtils.isBlank() 比 s == null || s.trim().isEmpty() 更直觀
推薦引入的依賴(Maven):
<!-- Apache Commons Lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<!-- Apache Commons Collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
<!-- Google Guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.2.0-jre</version>
</dependency>
<!-- Hutool(國產(chǎn)神器) -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
覺得有用的話,轉發(fā)給團隊里還在重復造輪子的同事,一起提升開發(fā)效率,早日下班!