前端视角 Java Web 入门手册 3.3:常用工具—— Apache Commons Lang3

295 阅读4分钟

Apache Commons 提供了大量可重用的 Java 工具类代码,其中最常用的是拓展 java.lang 的 commons-lang3

  • lang3:提供高度可重用的静态实用程序方法,主要用于为 java.lang 类增加值
  • arch:提供类以使用 os.arch 系统属性的值
  • builder:提供了一系列构建器类,用于帮助开发者一致地实现 Java 对象的 equalstoStringhashCodecompareTo 方法
  • 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>