[TOC]
1 場(chǎng)景
本文主要記錄java開(kāi)發(fā)中莺丑,常用的外部工具類(lèi)
,使用這些工具類(lèi)能大大提高開(kāi)發(fā)的效率
和代碼的健壯性
蛾扇。
因?yàn)闀r(shí)間問(wèn)題歇盼,本文將慢慢持續(xù)更新完善舔痕。
本文基于JDK1.8
2 相關(guān)maven依賴
2.1 commons-lang3
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
2.2 commons-collections4
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
2.3 commons-text
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.9</version>
</dependency>
2.4 commons-codec
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
2.5 commons-io
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.9.0</version>
</dependency>
2.6 commons-csv
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.8</version>
</dependency>
3 字符串相關(guān)
3.1 JDK
相關(guān)類(lèi):java.lang.String
3.1.1 數(shù)組、集合指定分隔符分隔
String[] arr = new String[]{"1", "2", "3"};
// 轉(zhuǎn)換數(shù)組豹缀,結(jié)果:1,2,3
String result1 = String.join(",", arr);
List<String> list = Stream.of(arr).collect(Collectors.toList());
// 轉(zhuǎn)換集合伯复,結(jié)果:1,2,3
String result2 = String.join(",", list);
3.2 commons-lang3包
相關(guān)類(lèi):
org.apache.commons.lang3.StringUtils
org.apache.commons.lang3.RandomStringUtils
3.2.1 字符串判空
/**
* StringUtils.isEmpty(null) = true
* StringUtils.isEmpty("") = true
* StringUtils.isEmpty(" ") = false
* StringUtils.isEmpty("bob") = false
* StringUtils.isEmpty(" bob ") = false
*/
boolean result = StringUtils.isEmpty(str);
boolean result = StringUtils.isNotEmpty(str);
/**
* StringUtils.isBlank(null) = true
* StringUtils.isBlank("") = true
* StringUtils.isBlank(" ") = true
* StringUtils.isBlank("bob") = false
* StringUtils.isBlank(" bob ") = false
*/
boolean result = StringUtils.isBlank(str);
boolean result = StringUtils.isNotEmpty(str);
3.2.2 字符串判斷相等
/**
* StringUtils.equals(null, null) = true
* StringUtils.equals(null, "abc") = false
* StringUtils.equals("abc", null) = false
* StringUtils.equals("abc", "abc") = true
* StringUtils.equals("abc", "ABC") = false
*/
boolean result = StringUtils.equals(null, "123");
3.2.3 是否包含子字符串
/**
* StringUtils.contains(null, *) = false
* StringUtils.contains(*, null) = false
* StringUtils.contains("", "") = true
* StringUtils.contains("abc", "") = true
* StringUtils.contains("abc", "a") = true
* StringUtils.contains("abc", "z") = false
*/
boolean result = StringUtils.contains("abcd", "ab");
3.3.4 判斷以某字符串開(kāi)頭
/**
* StringUtils.startsWith(null, null) = true
* StringUtils.startsWith(null, "abc") = false
* StringUtils.startsWith("abcdef", null) = false
* StringUtils.startsWith("abcdef", "abc") = true
* StringUtils.startsWith("ABCDEF", "abc") = false
*/
boolean result = StringUtils.startsWith("abcd","ab");
2.3.5 判斷以某字符串結(jié)尾
/**
* StringUtils.endsWith(null, null) = true
* StringUtils.endsWith(null, "def") = false
* StringUtils.endsWith("abcdef", null) = false
* StringUtils.endsWith("abcdef", "def") = true
* StringUtils.endsWith("ABCDEF", "def") = false
* StringUtils.endsWith("ABCDEF", "cde") = false
* StringUtils.endsWith("ABCDEF", "") = true
*/
boolean result = StringUtils.endsWith("abcd","cd");
3.3.4 補(bǔ)全字符串
/**
* StringUtils.leftPad(null, *, *) = null
* StringUtils.leftPad("", 3, "z") = "zzz"
* StringUtils.leftPad("bat", 3, "yz") = "bat"
* StringUtils.leftPad("bat", 5, "yz") = "yzbat"
* StringUtils.leftPad("bat", 8, "yz") = "yzyzybat"
* StringUtils.leftPad("bat", 1, "yz") = "bat"
* StringUtils.leftPad("bat", -1, "yz") = "bat"
* StringUtils.leftPad("bat", 5, null) = " bat"
* StringUtils.leftPad("bat", 5, "") = " bat"
*/
// 左邊補(bǔ)齊為5位字符串,結(jié)果:00123
String result = StringUtils.leftPad("123", 5, "0");
// 結(jié)果:123
String result = StringUtils.leftPad("123", 2, "0");
//-----------------------------
/**
* StringUtils.rightPad(null, *, *) = null
* StringUtils.rightPad("", 3, "z") = "zzz"
* StringUtils.rightPad("bat", 3, "yz") = "bat"
* StringUtils.rightPad("bat", 5, "yz") = "batyz"
* StringUtils.rightPad("bat", 8, "yz") = "batyzyzy"
* StringUtils.rightPad("bat", 1, "yz") = "bat"
* StringUtils.rightPad("bat", -1, "yz") = "bat"
* StringUtils.rightPad("bat", 5, null) = "bat "
* StringUtils.rightPad("bat", 5, "") = "bat "
*/
// 右側(cè)補(bǔ)齊為5位字符串邢笙,結(jié)果:12300
String result = StringUtils.rightPad("123", 5, "0");
3.3.5 反轉(zhuǎn)字符串
// 結(jié)果:cba
String result = StringUtils.reverse("abc");
3.3.6 重復(fù)字符串
/**
* StringUtils.repeat(null, 2) = null
* StringUtils.repeat("", 0) = ""
* StringUtils.repeat("", 2) = ""
* StringUtils.repeat("a", 3) = "aaa"
* StringUtils.repeat("ab", 2) = "abab"
* StringUtils.repeat("a", -2) = ""
*/
// 結(jié)果:00000
String result = StringUtils.repeat("0",5);
3.3.7 隨機(jī)字符串
//10位啸如,包含英文大小寫(xiě),如:MiLdFwsrDF
System.out.println(RandomStringUtils.randomAlphabetic(10));
//10位鸣剪,包含英文大小寫(xiě),和數(shù)字组底,如:QESP1Zjqjn
System.out.println(RandomStringUtils.randomAlphanumeric(10));
//10位,ASCII碼筐骇,如:Kv(f.1rC)*
System.out.println(RandomStringUtils.randomAscii(10));
//10位,指定文字江滨,如:ceabbaecec
System.out.println(RandomStringUtils.random(10, "abcde"));
//10位铛纬,數(shù)字,如:0025228642
System.out.println(RandomStringUtils.randomNumeric(10));
3.3 commons-text包
相關(guān)類(lèi):org.apache.commons.text.StringSubstitutor
3.1.1 替換字符串占位符
Map<String, String> valueMap = new HashMap<>();
valueMap.put("name", "張三");
valueMap.put("age", "18");
// 默認(rèn)替換占位符【${xxx}】唬滑,可調(diào)用構(gòu)造函數(shù)【new StringSubstitutor(valueMap)】
StringSubstitutor stringSubstitutor = new StringSubstitutor(valueMap, "${", "}");
// 替換結(jié)果:姓名:張三告唆,年齡:18。
String result = stringSubstitutor.replace("姓名:${name}晶密,年齡:${age}擒悬。");
//-------------------------
Map<String, Object> params = new HashMap<>();
params.put("jre-1.8", "java-version-1.8");
params.put("java.specification.version", "1.8");
StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
// 支持變量的嵌套替換
stringSubstitutor.setEnableSubstitutionInVariables(true);
// 結(jié)果:java-version-1.8
String result = stringSubstitutor.replace("${jre-${java.specification.version}}");
4 集合相關(guān)
4.1 commons-collections4包
相關(guān)類(lèi):org.apache.commons.collections4.CollectionUtils
4.1.1 判斷集合是否為空
// 非線程安全
boolean result = CollectionUtils.isEmpty(list);
boolean result = CollectionUtils.isNotEmpty(list);
4.1.2 元素加到集合中
List<String> list = new ArrayList<String>(){{add("1");add("2");}};
// 如何集合被更改,返回true稻艰,否則返回false懂牧。list內(nèi)容變更為:1, 2, a, b
boolean result = CollectionUtils.addAll(list,"a","b");
// 集合追加到集合
boolean result = CollectionUtils.addAll(list1,list2);
4.1.3 反轉(zhuǎn)數(shù)組
String[] arr = new String[]{"1", "2", "3"};
// arr結(jié)果為:3,2,1
CollectionUtils.reverseArray(arr);
4.1.4 合并集合
// 返回結(jié)果:判斷集合是否變更
boolean result = CollectionUtils.addAll(targetList,sourceList);
5 轉(zhuǎn)碼
5.1 commons-codec包
相關(guān)類(lèi):
org.apache.commons.codec.digest.DigestUtils
5.1.1 MD5摘要
// 生成md5摘要(32位十六進(jìn)制),返回:e10adc3949ba59abbe56e057f20f883e
String md5Hex = DigestUtils.md5Hex("123456");
// 字節(jié)數(shù)組尊勿,生成md5摘要
// public static String md5Hex(final byte[] data);
// 輸入流僧凤,生成md5摘要(可用于生成文件的md5摘要)
// public static String md5Hex(final InputStream data) throws IOException;
5.1.2 SHA-1摘要
// 生成SHA-1摘要(十六進(jìn)制),返回:7c4a8d09ca3762af61e59520943dc26494f8941b
String sha1 = DigestUtils.sha1Hex("123456");
// 字節(jié)數(shù)組元扔,生成SHA-1摘要
// public static String sha1Hex(final byte[] data);
// 輸入流躯保,生成SHA-1摘要(可用于生成文件的SHA-1摘要)
// public static String sha1Hex(final InputStream data) throws IOException;
6 文件相關(guān)
6.1 commons-io包
相關(guān)類(lèi):
org.apache.commons.io.FileUtils
org.apache.commons.io.FilenameUtils
6.1 獲取文件路徑信息
// 獲取文件名(無(wú)后綴),返回:電話區(qū)域表
String baseName = FilenameUtils.getBaseName("D:\\config\\電話區(qū)域表.xlsx");
// 獲取文件名(包括后綴)澎语,返回:電話區(qū)域表.xlsx
String name = FilenameUtils.getName("D:\\config\\電話區(qū)域表.xlsx");
// 獲取后綴途事,返回:xlsx
String extension = FilenameUtils.getExtension("D:\\config\\電話區(qū)域表.xlsx");
6.2 字符串寫(xiě)入文件
// 寫(xiě)入數(shù)據(jù)
String data = "文本數(shù)據(jù)";
// 追加寫(xiě)入(默認(rèn)false)
boolean append = true;
// 將一個(gè)字符串寫(xiě)入一個(gè)文件(無(wú)換行)
FileUtils.writeStringToFile(new File("D:\\config\\test.txt"), data, Charset.forName("GBK"), append);
6.3 批量寫(xiě)入文件
// 集合內(nèi)容
List<String> list = new ArrayList<String>(){{add("aaa");add("bbb");add("ccc");}};
// 行分隔符(默認(rèn)null)
String lineEnding = null;
// 追加寫(xiě)入(默認(rèn)false)
boolean append = false;
// 字符集名稱(chēng)(默認(rèn)為null验懊,采用操作系統(tǒng)默認(rèn)值)
String charsetName = "GBK";
// 集合內(nèi)的每個(gè)元素,執(zhí)行toString()尸变,按行寫(xiě)入文件
FileUtils.writeLines(new File("D:\\config\\test.txt"), charsetName, list, lineEnding, append);