Apache Commons 提供了大量可重用的 Java 工具类代码,其中最常用的是拓展 java.lang 的 commons-lang3
- lang3:提供高度可重用的静态实用程序方法,主要用于为 java.lang 类增加值
- arch:提供类以使用 os.arch 系统属性的值
- builder:提供了一系列构建器类,用于帮助开发者一致地实现 Java 对象的
equals、toString、hashCode和compareTo方法 - compare:提供类以使用可比较接口和比较接口
- concurrent:为多线程编程提供支持类
- event:提供一些有用的基于事件的实用程序
- exception:提供异常功能
- math:为商业数学类扩展 java.math
- mutable:为基元值和对象提供类型化的可变包装器
- reflect:提供反射 java.lang.reflect API 的常见高级用法
- text:提供用于处理和操作文本的类,部分用作 java.text 的扩展
- text.translate:用于从一组较小的构造块创建文本转换例程的 API
- time:提供处理日期和持续时间的类和方法
- tuple:元组类,允许以简单的方式存储多个值
字符串
StringUtils 是 Commons Lang3 中最常用的类之一,提供了大量的字符串操作方法,涵盖空值检查、字符串拆分、替换、反转、大小写转换等功能。
// 截取固定长度字符串
String t = StringUtils.abbreviate("High Quality Hot Selling", 10); // High Qu...
// 判断参数是否为 null 或者空字符串
Boolean emptyStr = StringUtils.isEmpty(""); // true
// 和 isEmpty 类似,不过
Boolean blankStr = StringUtils.isBlank(" "); // true
// 判断一字符串是否包含另一字符串
StringUtils.contains("abc", "z"); // false
// 统计一字符串在另一字符串中出现次数
StringUtils.countMatches("abba", "a"); // 2
// 判断两字符串是否内容相同
StringUtils.equals("abc", "abc"); // true
// 正向查找字符在字符串中第一次出现的位置
StringUtils.indexOf("aabaabaa", "b"); // 2
// 大小写转换
StringUtils.upperCase("aBc"); // "ABC"
StringUtils.lowerCase("aBc"); // "abc"
// 替换字符串内容
StringUtils.replace("aba", "a", "z"); // "zbz"
StringUtils.overlay("abcdef", "zz", 2, 4); // "abzzef"
// 删除某字符
StringUtils.remove("queued", "u"); // "qeed"
// 去除首尾空格,类似 trim
StringUtils.strip(" ab c "); // "ab c"
// 截取字符串
StringUtils.substring("abcd", 2); // "cd"
StringUtils.substring("abcdef", 2, 4); // "cd"
// 分割字符串
StringUtils.split("a..b.c", "."); // ["a", "b", "c"]
// 字符串连接
String[] words = {"Java", "Apache", "Commons"};
System.out.println(StringUtils.join(words, ", ")); // "Java, Apache, Commons"
数组
ArrayUtils 提供了对数组的操作方法,包括数组的添加、删除、查找、克隆、反转等功能。
// 创建两个数组
int[] array1 = {1, 2, 3};
int[] array2 = {2, 3, 4};
// 检查数组是否为空
System.out.println(ArrayUtils.isEmpty(array1)); // false
// 比较两个数组是否相等
boolean isEqual = ArrayUtils.isEquals(array1, array2);
System.out.println("array1 和 array2 是否相等:" + isEqual);
// 合并两个数组
int[] mergeArray = ArrayUtils.addAll(array1, array2);
System.out.println("array1 和 array2 合并后的结果:" + ArrayUtils.toString(mergeArray));
// 查找元素在数组中的位置
int index = ArrayUtils.indexOf(array1, 2);
System.out.println("元素 2 在 array1 中的位置:" + index);
// 在数组末尾添加元素
int[] removeResult = ArrayUtils.add(array1, 1);
System.out.println("添加元素 1 后的 array1:" + ArrayUtils.toString(removeResult));
// 移除数组中的元素
int[] removeResult = ArrayUtils.removeElement(array1, 2);
System.out.println("移除元素 2 后的 array1:" + ArrayUtils.toString(removeResult));
// 拷贝数组
int[] copyResult = ArrayUtils.clone(array1);
System.out.println("array1 的拷贝:" + ArrayUtils.toString(copyResult));
// 判断数组中是否包含指定元素
boolean contains = ArrayUtils.contains(array1, 2);
System.out.println("array1 中是否包含元素 2:" + contains);
// 反转数组
ArrayUtils.reverse(array1);
System.out.println("array1 反转后的结果:" + ArrayUtils.toString(array1));
// 数组排序
ArrayUtils.sort(array1);
System.out.println("array1 排序后的结果:" + ArrayUtils.toString(array1));
对象
ObjectUtils 提供了对对象的处理方法,如对象的默认值设置、比较、克隆等。
// 定义两个对象
String str1 = null;
String str2 = "hello";
// 比较两个对象是否相等
boolean isEqual = ObjectUtils.equals(str1, str2);
System.out.println("str1 和 str2 是否相等:" + isEqual);
// 如果对象为 null,则返回默认值
String defaultStr = ObjectUtils.defaultIfNull(str1, "default");
System.out.println("str1 的默认值为:" + defaultStr);
// 将对象转换为字符串,如果对象为 null 则返回指定的值
String toStringResult = ObjectUtils.toString(str1, "default");
System.out.println("str1 的字符串表示为:" + toStringResult);
// 返回对象的哈希码,如果对象为 null 则返回 0
int hashCodeResult = ObjectUtils.hashCode(str1);
System.out.println("str1 的哈希码为:" + hashCodeResult);
数值
NumberUtils 提供了数值处理的方法,包括数值的转换、比较、范围检查等。
String numStr1 = "100";
String numStr2 = "abc";
// 字符串转整数,支持设置默认值
int num1 = NumberUtils.toInt(numStr1, 0);
int num2 = NumberUtils.toInt(numStr2, 0);
System.out.println(num1); // 100
System.out.println(num2); // 0
// 获取最小值
int min = NumberUtils.min(10, 20, 5);
System.out.println(min); // 5
// 判断是否为数字
System.out.println(NumberUtils.isParsable("123")); // true
System.out.println(NumberUtils.isParsable("12.3")); // true
System.out.println(NumberUtils.isParsable("abc")); // false
元组
Pair<Integer, String> p1 = new ImmutablePair<>(100, "Byron");
Pair<Integer, String> p2 = new ImmutablePair<>(96, "Lisa");
System.out.printf("%s: %d\n", p1.getRight(), p1.getLeft());
System.out.printf("%s: %d\n", p2.getValue(), p2.getKey());
Triple<String, Boolean, Integer> t = MutableTriple.of("test1", true, 1);
System.out.println("左值:" + t.getLeft() + " 中间值:" + t.getMiddle() + " 右值:" + t.getRight());
系统信息
// 判断操作系统类型
boolean isWin10 = SystemUtils.IS_OS_WINDOWS_10;
boolean isMac = SystemUtils.IS_OS_MAC;
boolean isLinux = SystemUtils.IS_OS_LINUX;
// 判断java版本
boolean isJava8 = SystemUtils.IS_JAVA_1_8;
// 获取java相关目录
File javaHome = SystemUtils.getJavaHome();
File userHome = SystemUtils.getUserHome();// 操作系统用户目录
File userDir = SystemUtils.getUserDir();// 项目所在路径
File tmpDir = SystemUtils.getJavaIoTmpDir();
Maven 依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.17.0</version>
</dependency>