# Apache Commons-Lang3
# 关于 Apache Commons-Lang3 的使用
在日常工作中,我们经常要使用到一些开源工具包,比如 String,Date 等等。有时候我们并不清楚有这些工具类的存在,造成在开发过程中重新实现导致时间浪费,并且开发的代码质量不佳。而 apache 其实已经提供了系列的工具包给我们使用,只是大多数人,平时没有注意到。我们从使用最多的 org.apache.commons.lang3 这个 jar 包开始讲起,lang3 这个开源 jar 包在真实工作中,算是使用最多,运用最广的一个开源包。如何我们彻底的掌握这个包的使用,那么必然给开发工作带来很多好处:节省时间,提高工作效率等等。
- lang3 整体的结构的一个概况及各个类的作用
- StringUtils
- ArrayUtils
- BooleanUtils
- ClassUtils
# SpringBoot - 实战开发 - commons-lang3
# 一、commons-lang3 简介
commons-lang3 是 Apache 的 Jakarta commons 工程下具有一系列公共基础类。
Apache 的 Jakarta commons 工程项目列表路径:http://commons.apache.org
Commons 基础类包基本上是基于 JDK API 开发而来,依赖微小,可重用性是 Jakarta 的灵魂所在
Lang 组件主要是一些工具类,涉及到 数组工具类,字符串工具类,字符工具类,数学方面,时间日期工具类,异常,事件等工具类。
# 二、Maven 依赖
<dependency> | |
<groupId>org.apache.commons</groupId> | |
<artifactId>commons-lang3</artifactId> | |
<version>3.9</version> | |
</dependency> |
# 三、字符串的处理类 (StringUtils)
// 缩短到某长度,用... 结尾。其实就是 (substring (str, 0, max-3) + "...") | |
//public static String abbreviate(String str,int maxWidth) | |
StringUtils.abbreviate("abcdefg", 6);// ---"abc..." | |
// 字符串结尾的后缀是否与你要结尾的后缀匹配,若不匹配则添加后缀 | |
StringUtils.appendIfMissing("abc","xyz");//---"abcxyz" | |
StringUtils.appendIfMissingIgnoreCase("abcXYZ","xyz");//---"abcXYZ" | |
// 首字母大小写转换 | |
StringUtils.capitalize("cat");//---"Cat" | |
StringUtils.uncapitalize("Cat");//---"cat" | |
// 字符串扩充至指定大小且居中(若扩充大小少于原字符大小则返回原字符,若扩充大小为 负数则为 0 计算 ) | |
StringUtils.center("abcd", 2);//--- "abcd" | |
StringUtils.center("ab", -1);//--- "ab" | |
StringUtils.center("ab", 4);//---" ab " | |
StringUtils.center("a", 4, "yz");//---"yayz" | |
StringUtils.center("abc", 7, "");//---" abc " | |
// 去除字符串中的 "\n", "\r", or "\r\n" | |
StringUtils.chomp("abc\r\n");//---"abc" | |
// 判断一字符串是否包含另一字符串 | |
StringUtils.contains("abc", "z");//---false | |
StringUtils.containsIgnoreCase("abc", "A");//---true | |
// 统计一字符串在另一字符串中出现次数 | |
StringUtils.countMatches("abba", "a");//---2 | |
// 删除字符串中的梭有空格 | |
StringUtils.deleteWhitespace(" ab c ");//---"abc" | |
// 比较两字符串,返回不同之处。确切的说是返回第二个参数中与第一个参数所不同的字符串 | |
StringUtils.difference("abcde", "abxyz");//---"xyz" | |
// 检查字符串结尾后缀是否匹配 | |
StringUtils.endsWith("abcdef", "def");//---true | |
StringUtils.endsWithIgnoreCase("ABCDEF", "def");//---true | |
StringUtils.endsWithAny("abcxyz", new String[] {null, "xyz", "abc"});//---true | |
// 检查起始字符串是否匹配 | |
StringUtils.startsWith("abcdef", "abc");//---true | |
StringUtils.startsWithIgnoreCase("ABCDEF", "abc");//---true | |
StringUtils.startsWithAny("abcxyz", new String[] {null, "xyz", "abc"});//---true | |
// 判断两字符串是否相同 | |
StringUtils.equals("abc", "abc");//---true | |
StringUtils.equalsIgnoreCase("abc", "ABC");//---true | |
// 比较字符串数组内的所有元素的字符序列,起始一致则返回一致的字符串,若无则返回 "" | |
StringUtils.getCommonPrefix(new String[] {"abcde", "abxyz"});//---"ab" | |
// 正向查找字符在字符串中第一次出现的位置 | |
StringUtils.indexOf("aabaabaa", "b");//---2 | |
StringUtils.indexOf("aabaabaa", "b", 3);//---5 (从角标 3 后查找) | |
StringUtils.ordinalIndexOf("aabaabaa", "a", 3);//---1 (查找第 n 次出现的位置) | |
// 反向查找字符串第一次出现的位置 | |
StringUtils.lastIndexOf("aabaabaa", ‘b‘);//---5 | |
StringUtils.lastIndexOf("aabaabaa", ‘b‘, 4);//---2 | |
StringUtils.lastOrdinalIndexOf("aabaabaa", "ab", 2);//---1 | |
// 判断字符串大写、小写 | |
StringUtils.isAllUpperCase("ABC");//---true | |
StringUtils.isAllLowerCase("abC");//---false | |
// 判断是否为空 (注:isBlank 与 isEmpty 区别) | |
StringUtils.isBlank(null);StringUtils.isBlank("");StringUtils.isBlank(" ");//---true | |
StringUtils.isNoneBlank(" ", "bar");//---false | |
StringUtils.isEmpty(null);StringUtils.isEmpty("");//---true | |
StringUtils.isEmpty(" ");//---false | |
StringUtils.isNoneEmpty(" ", "bar");//---true | |
// 判断字符串数字 | |
StringUtils.isNumeric("123");//---false | |
StringUtils.isNumeric("12 3");//---false (不识别运算符号、小数点、空格……) | |
StringUtils.isNumericSpace("12 3");//---true | |
// 数组中加入分隔符号 | |
//StringUtils.join([1, 2, 3], ‘;‘);//---"1;2;3" | |
// 大小写转换 | |
StringUtils.upperCase("aBc");//---"ABC" | |
StringUtils.lowerCase("aBc");//---"abc" | |
StringUtils.swapCase("The dog has a BONE");//---"tHE DOG HAS A bone" | |
// 替换字符串内容……(replacePattern、replceOnce) | |
StringUtils.replace("aba", "a", "z");//---"zbz" | |
StringUtils.overlay("abcdef", "zz", 2, 4);//---"abzzef"(指定区域) | |
StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, | |
new String[]{"w", "t"});//---"wcte"(多组指定替换 ab->w,d->t) | |
// 重复字符 | |
StringUtils.repeat(‘e‘, 3);//---"eee" | |
// 反转字符串 | |
StringUtils.reverse("bat");//---"tab" | |
// 删除某字符 | |
StringUtils.remove("queued", ‘u‘);//---"qeed" | |
// 分割字符串 | |
StringUtils.split("a..b.c", ‘.‘);//---["a", "b", "c"] | |
StringUtils.split("ab:cd:ef", ":", 2);//---["ab", "cd:ef"] | |
StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-", 2);//---["ab", "cd-!-ef"] | |
StringUtils.splitByWholeSeparatorPreserveAllTokens("ab::cd:ef", ":");//-["ab"," ","cd","ef"] | |
// 去除首尾空格,类似 trim……(stripStart、stripEnd、stripAll、stripAccents) | |
StringUtils.strip(" ab c ");//---"ab c" | |
StringUtils.stripToNull(null);//---null | |
StringUtils.stripToEmpty(null);//---"" | |
// 截取字符串 | |
StringUtils.substring("abcd", 2);//---"cd" | |
StringUtils.substring("abcdef", 2, 4);//---"cd" | |
//left、right 从左 (右) 开始截取 n 位字符 | |
StringUtils.left("abc", 2);//---"ab" | |
StringUtils.right("abc", 2);//---"bc" | |
// 从第 n 位开始截取 m 位字符 n m | |
StringUtils.mid("abcdefg", 2, 4);//---"cdef" | |
StringUtils.substringBefore("abcba", "b");//---"a" | |
StringUtils.substringBeforeLast("abcba", "b");//---"abc" | |
StringUtils.substringAfter("abcba", "b");//---"cba" | |
StringUtils.substringAfterLast("abcba", "b");//---"a" | |
StringUtils.substringBetween("tagabctag", "tag");//---"abc" | |
StringUtils.substringBetween("yabczyabcz", "y", "z");//---"abc" |
# 四、随机数生成类 (RandomStringUtils)
// 随机生成 n 位数数字 | |
RandomStringUtils.randomNumeric(n); | |
// 在指定字符串中生成长度为 n 的随机字符串 | |
RandomStringUtils.random(n, "abcdefghijk"); | |
// 指定从字符或数字中生成随机字符串 | |
System.out.println(RandomStringUtils.random(n, true, false)); | |
System.out.println(RandomStringUtils.random(n, false, true)); |
# 五、数字类 NumberUtils
// 从数组中选出最大值 | |
NumberUtils.max(new int[] { 1, 2, 3, 4 });//---4 | |
// 判断字符串是否全是整数 | |
NumberUtils.isDigits("153.4");//--false | |
// 判断字符串是否是有效数字 | |
NumberUtils.isNumber("0321.1");//---false |
# 六、数组类 ArrayUtils
// 创建数组 | |
String[] array = ArrayUtils.toArray("1", "2"); | |
// 判断两个数据是否相等,如果内容相同, 顺序相同 则返回 true | |
ArrayUtils.isEquals(arr1,arr2); | |
// 判断数组中是否包含某一对象 | |
ArrayUtils.contains(arr, "33"); | |
// 二维数组转换成 MAP | |
Map map = ArrayUtils.toMap(new String[][] { | |
{ "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } }); |
# 七、日期类 DateUtils
// 日期加 n 天 | |
DateUtils.addDays(new Date(), n); | |
// 判断是否同一天 | |
DateUtils.isSameDay(date1, date2); | |
// 字符串时间转换为 Date | |
DateUtils.parseDate(str, parsePatterns); |
# 八、加密解密类
// MD5 加密 | |
String encodeStr=DigestUtils.md5Hex(text + key); | |
// 密钥进行验证 | |
String md5Text = md5(text, key); | |
if(md5Text.equalsIgnoreCase(md5)) | |
{ | |
System.out.println("MD5验证通过"); | |
return true; | |
} |
# 九、运行环境的系统信息
getArch();// 获取电脑处理器体系结构 32 bit、64 bit、unknown | |
getType();// 返回处理器类型 x86、ia64、ppc、unknown | |
is32Bit();// 检查处理器是否为 32 位 | |
is64Bit();// 检查处理器是否为 64 位 | |
isIA64();// 检查是否是英特尔安腾处理器类型 | |
isPPC();// 检查处理器是否是电源 PC 类型 | |
isX86();// 检查处理器是否是 x86 类型 |