0


Java开源工具库使用之Apache commons-lang3

文章目录

前言

标准的 Java 库未能提供足够的方法来操作其核心类,Apache-commons-lang 提供了许多辅助工具,特别是字符串操作方法、基本数值方法、对象反射、并发、对象创建和序列化以及系统属性。此外,它还包含了对 java.util 的基本增强功能,日期和一系列的实用工具。

commons-lang 有两个主要版本,lang 和 lang3。lang 是早前版本,于 2002 年发布,而 lang3 是第三个大版本,摒弃了一些弱和旧的特性,不再兼容 lang,包名也更新为 lang3,现在使用主要以 lang3 为主 。

pom依赖为:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>

下图表现了 commons-lang3 包中 Utils 类的分布

lang3_utils

下表描述了上述 Utils 类作用及提供官方测试例子
类名作用官方测试例子AnnotationUtils注解相关AnnotationUtilsTest.javaArchUtils操作系统相关,使用

System.getProperties("os.arch")

系统属性的值ArchUtilsTest.javaArrayUtils数组相关,提供数组添加,删除,打乱等方法ArrayUtilsTest.javaBooleanUtilsboolean 相关,提供 “yes”,“no”,“off”,“on” 转换 boolean 相关方法BooleanUtilsTest.javaCalendarUtils日历相关CalendarUtilsTest.javaCharSequenceUtilsnull 安全的字符序列操作方法CharSequenceUtilsTest.javaCharSetUtils字符集合操作。提供包含,删除,压缩,计数等方法CharSetUtilsTest.javaCharUtils字符相关CharUtilsTest.javaClassLoaderUtils类加载器相关ClassLoaderUtilsTest.javaClassPathUtilsClassPath 相关ClassPathUtilsTest.javaClassUtils不用反射操作类,提供 Class 对象转类名 String ,类缩略名等方法ClassUtilsTest.javaComparableUtils提供将 Comparable.compareTo(T) 结果转换为 boolean 的辅助方法ComparableUtilsTest.javaConcurrentUtils并发相关ConcurrentUtilsTest.javaConstructorUtils反射相关,专注于构造器ConstructorUtilsTest.javaDateUtils日期相关DateUtilsTest.javaDateFormatUtils提供日期和时间格式化实用方法和常量DateFormatUtilsTest.javaDurationFormatUtils提供 Duration 格式化实用方法和常量DurationFormatUtilsTest.javaDurationUtilsDuration 相关DurationUtilsTest.javaEnumUtils枚举相关EnumUtilsTest.javaEventUtils提供了一些基于事件的实用方法EventUtilsTest.javaExceptionUtils异常相关,提供用于操作和检查

Throwable

对象的方法ExceptionUtilsTest.javaFieldUtils反射相关,专注于字段FieldUtilsTest.javaIEEE754rUtils基于 IEEE-754 提供数字相关方法IEEE754rUtilsTest.javaInheritanceUtils反射相关,主要关注于继承的实用方法InheritanceUtilsTest.javaLocaleUtils

Locale

相关LocaleUtilsTest.javaMethodUtils反射相关, 专注于方法MethodUtilsTest.javaNumberUtils数字相关,提供检测字符串是否合法Java数字,是否可解析为数字等方法NumberUtilsTest.javaObjectUtils对象相关,提供对象数组判空,是否相等,最大,最小等方法ObjectUtilsTest.javaRandomStringUtils随机字符串相关RandomStringUtilsTest.javaRandomUtils随机数相关RandomUtilsTest.javaRegExUtils正则相关RegExUtilsTest.javaSerializationUtils序列化相关SerializationUtilsTest.javaStringUtils字符串相关StringUtilsTest.javaSystemUtils

java.lang.System

相关SystemUtilsTest.javaThreadUtils线程相关ThreadUtilsTest.javaTypeUtils反射相关,侧重于类型检查,特别是关于泛型TypeUtilsTest.java

一、字符串

1.1 StringUtils

  • 字符串缩略StringUtils.abbreviate("abcdefg",6);// "abc..."
  • 字符串 append如果字符串尚未以任何后缀结尾,则将后缀附加到字符串的末尾StringUtils.appendIfMissing("abcMNO","xyz","mno");// "abcMNOxyz"
  • 字符串删除末尾换行符删除字符串末尾\r, \n 或 \r\n,只会删一次StringUtils.chomp("abc\r\n\r\n");// "abc\r\n"
  • 字符串删除末尾单个字符StringUtils.chop("abc");// "ab"
  • 字符串是否包含空白字符StringUtils.containsWhitespace("hello world");// true
  • 字符串中字符/字符串出现次数StringUtils.countMatches("abba",'a');// 2StringUtils.countMatches("abba","a");// 2
  • 字符串去除空白字符StringUtils.deleteWhitespace(" ab c ");// "abc"
  • 字符串差异StringUtils.difference("abcde","abxyz");// "xyz"StringUtils.difference("abcde","xyz");// "xyz"
  • 字符串是否已某个后缀结束StringUtils.endsWith("ABCDEF","def");// falseStringUtils.endsWithAny("abcXYZ","def","XYZ");// trueStringUtils.endsWithIgnoreCase("ABCDEF","def");// true
  • 字符串公共前缀StringUtils.getCommonPrefix("abcde","abxyz");// "ab"
  • 字符串是否空,null,空白字符StringUtils.isBlank(" ");// trueStringUtils.isNotBlank(" ");// false
  • 字符串是否空,nullStringUtils.isEmpty("");// trueStringUtils.isEmpty(" ");// falseStringUtils.isNotEmpty(" ");// true
  • 字符串 joinStringUtils.join(["a","b","c"],"--");// "a--b--c"
  • 字符串重复StringUtils.repeat("ab",2);// "abab"
  • 字符串替换StringUtils.replace("aba","a","z");// "zbz"
  • 字符串翻转StringUtils.reverse("bat");// "tab"
  • 字符串旋转StringUtils.rotate("abcdefg",2);// "fgabcde"StringUtils.rotate("abcdefg",-2);// "cdefgab"
  • 字符串切割StringUtils.split("abc def");// ["abc", "def"]StringUtils.split("abc def");// ["abc", "def"]StringUtils.split(" abc ");// ["abc"]StringUtils.splitByCharacterType("ab de fg");// ["ab", " ", "de", " ", "fg"]StringUtils.splitByCharacterType("ab de fg");// ["ab", " ", "de", " ", "fg"]StringUtils.splitByCharacterType("ab:cd:ef");// ["ab", ":", "cd", ":", "ef"]StringUtils.splitByCharacterType("number5");// ["number", "5"]StringUtils.splitByCharacterType("fooBar");// ["foo", "B", "ar"]StringUtils.splitByCharacterType("foo200Bar");// ["foo", "200", "B", "ar"]StringUtils.splitByCharacterType("ASFRules");// ["ASFR", "ules"]
  • 字符串strip类似 trim, trim 是删除前后空格,而 trip 删除空白字符StringUtils.strip(" ab c ");// "ab c"
  • 字符串截断StringUtils.truncate("abcdefg",4);// "abcd"
  • 字符串包裹StringUtils.wrap("ab","'");// "'ab'"

1.2 CharSetUtils

  • 字符串是否包含字符集合字符CharSetUtils.containsAny("hello","k-p");// trueCharSetUtils.containsAny("hello","a-d");// false
  • 字符串包含字符集合字符计数CharSetUtils.count("hello","k-p");// 3CharSetUtils.count("hello","a-e");// 1
  • 字符串删除字符集合CharSetUtils.delete("hello","hl");// "eo"
  • 字符串只保留字符集合字符CharSetUtils.keep("hello","hl");// "hll"
  • 字符串压缩字符集合字符CharSetUtils.squeeze("hello","k-p");// "helo"

1.3 RegExUtils

  • 字符串正则删除StringUtils.removeAll("any",Pattern.compile(".*"));// ""StringUtils.removeAll("A<__>\n<__>B",Pattern.compile("<.*>"));// "A\nB"StringUtils.removeAll("A<__>\n<__>B",Pattern.compile("(?s)<.*>"));// "AB"StringUtils.removeAll("ABCabc123abc",Pattern.compile("[a-z]"));// "ABC123"
  • 字符串正则替换StringUtils.replaceAll("",Pattern.compile(".*"),"zzz");// "zzz"StringUtils.replaceAll("",Pattern.compile(".+"),"zzz");// ""StringUtils.replaceAll("ABCabc123",Pattern.compile("[^A-Z0-9]+"),"");// "ABC123"

1.4 RandomStringUtils

  • n位长度字符串RandomStringUtils.random(10);
  • n位长度字符串,字符为a-zA-ZRandomStringUtils.randomAlphabetic(10);
  • n位长度字符串,字符为a-zA-Z0-9RandomStringUtils.randomAlphanumeric(10);
  • n位长度字符串, 字符为Ascii字符RandomStringUtils.randomAscii(10);
  • n位长度字符串, 字符为数字RandomStringUtils.randomNumeric(10);

二、数字

2.1 NumberUtils

  • 字符串转数字NumberUtils.toInt("");// 0NumberUtils.toInt("1");// 1NumberUtils.toFloat("1.5");// 1.5fNumberUtils.toDouble("1.5");// 1.5dNumberUtils.toLong("1");// 1L
  • 最大最小值NumberUtils.max(1,2,3,4);// 4NumberUtils.min(1.0f,2.0f,3.0f,4.0f);// 1.0f

2.2 Fraction

  • 分数相加减乘除Fraction f1 =Fraction.getFraction(1,3);Fraction f2 =Fraction.getFraction(1,4);Fraction add = f1.add(f2);// 7/12Fraction subtract = f1.subtract(f2);// 1/12Fraction multi = f1.multiplyBy(f2);// 1/12Fraction divide = f1.divideBy(f2);// 4/3
  • 获取分子分母f1.getNumerator();// 1f1.getDenominator();// 3
  • 根据字符串,double, 分子分母获取分数Fraction.getFraction("12.3");// 123/100Fraction.getFraction(12.3d);// 123/100Fraction.getFraction(123,100);//123/100

三、时间

3.1 DateUtils

  • 是否相同日期DateUtils.isSameDay(date1, date2);
  • 是否相同时间DateUtils.isSameInstant(date1, date2);
  • 时间范围迭代器// 一周以周日为起始,从 now 这周的周日生成一周Iterator<Calendar> iterator1 =DateUtils.iterator(now,DateUtils.RANGE_WEEK_SUNDAY);// 一周以周一为起始,从 now 这周的周一生成一周Iterator<Calendar> iterator =DateUtils.iterator(now,DateUtils.RANGE_WEEK_MONDAY);// 从 now 这个时间的日期作为起始生成一周Iterator<Calendar> iterator =DateUtils.iterator(now,DateUtils.RANGE_WEEK_RELATIVE);// 从 now 这个时间的日期作为中心生成一周Iterator<Calendar> iterator =DateUtils.iterator(now,DateUtils.RANGE_WEEK_CENTER);// 一周以周日为起始,从 now 这个月的第一周周日作为起始生成一个月Iterator<Calendar> iterator =DateUtils.iterator(now,DateUtils.RANGE_MONTH_SUNDAY);// 一周以周一为起始,从 now 这个月的第一周周一作为起始生成一个月Iterator<Calendar> iterator =DateUtils.iterator(now,DateUtils.RANGE_MONTH_MONDAY);
  • 解析字符串DateUtils.parseDate(now,"yyyy-MM--dd HH:mm:ss");
  • 日期四舍五入SimpleDateFormat dateParser =newSimpleDateFormat("yyyy-MM-dd");SimpleDateFormat dateTimeParser =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = dateParser.parse("2022-08-08");DateUtils.round(date,Calendar.YEAR);// 2023-01-01DateUtils.round(date,Calendar.MONTH);// 2022-08-01Date date_half_month = dateParser.parse("2022-08-28");DateUtils.round(date,DateUtils.SEMI_MONTH);// 2022-08-01DateUtils.round(date_half_month,DateUtils.SEMI_MONTH);// 2022-08-16Date date1 = dateTimeParser.parse("2022-08-08 08:08:08");DateUtils.round(date1,Calendar.HOUR);// 2022-08-08 08:00:00
  • 日期截断DateUtils.truncate(date,Calendar.YEAR);// 2022-01-01DateUtils.truncate(date,Calendar.MONTH);// 2022-08-01DateUtils.truncate(date1,Calendar.HOUR);// 2022-08-08 08:00:00

3.2 DateFormatUtils

  • 时间格式化
DateFormatUtils.format(date,"yyyy-MM-dd HH:mm:ss");// 2022-08-08 00:00:00DateFormatUtils.ISO_8601_EXTENDED_DATE_FORMAT.format(date);// 2022-08-08DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.format(date);// 2022-08-08T00:00:00+08:00DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.format(date);// 2022-08-08T00:00:00

四、数组

4.1 ArrayUtils

  • 数组增删int[] arr ={1,0};ArrayUtils.add(arr,1);// [1, 0, 1]ArrayUtils.addFirst(arr,1);// [1, 1, 0]ArrayUtils.insert(1, arr,2,3);// [1, 2, 3, 0]ArrayUtils.remove(arr,1);// [1]ArrayUtils.removeAll(arr,0,1);// []int[] arr2 ={1,0,1,0}ArrayUtils.removeAllOccurrences(arr2,1);// [0, 0]ArrayUtils.removeElements(arr2,1);// [0, 1, 0]
  • 数组打乱顺序ArrayUtils.shuffle(arr);
  • 移位int[] arr2 ={1,2,3,4,5};ArrayUtils.shift(arr,1);// [5, 1, 2, 3, 4]ArrayUtils.shift(arr,-1);// [2, 3, 4, 5, 1]
  • 交换ArrayUtils.swap(arr,0,1);// [0, 1]
  • 翻转ArrayUtils.reverse(arr);// [0, 1]

五、其它

5.1 RandomUtils

  • 随机整数RandomUtils.nextInt(1,100);RandomUtils.nextInt();RandomUtils.nextLong(1L,1000000000L);
  • 随机浮点数RandomUtils.nextDouble(1.0,1000000000.0);RandomUtils.nextFloat(1.0f,1000000000.0f);
  • 随机布尔值RandomUtils.nextBoolean();

5.2 SystemUtils

  • 获取环境变量SystemUtils.getEnvironmentVariable("PATH","default_value");
  • 获取 HostnameSystemUtils.getHostName();
  • 获取 JavaHomeSystemUtils.getJavaHome();
  • 获取 UserHomeSystemUtils.getUserHome();
  • 获取操作系统版本SystemUtils.OS_VERSION
  • 获取操作系统名字SystemUtils.OS_NAME
  • 获取 java 版本SystemUtils.JAVA_VERSION

5.3 ExceptionUtils

  • 获取异常信息Throwable th =newIllegalArgumentException("Base");ExceptionUtils.getMessage(th);// "IllegalArgumentException: Base"
  • 获取错误的根原因privatestaticclassExceptionWithoutCauseextendsException{privatestaticfinallong serialVersionUID =1L;@SuppressWarnings("unused")publicvoidgetTargetException(){// noop}}Throwable withoutCause =newExceptionWithoutCause();Throwable nested =newNestableException(withoutCause);ExceptionUtils.getRootCause(nested);
  • 获取栈帧消息String[] actual =ExceptionUtils.getStackFrames(newThrowable(){privatestaticfinallong serialVersionUID =1L;// provide static stack trace to make test stable@OverridepublicvoidprintStackTrace(finalPrintWriter s){ s.write("org.apache.commons.lang3.exception.ExceptionUtilsTest$1\n"+"\tat org.apache.commons.lang3.exception.ExceptionUtilsTest.testgetStackFramesGappyPath(ExceptionUtilsTest.java:706)\n"+"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"+"\tat com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)\n"+"\tat com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)\n");}});assertArrayEquals(newString[]{"org.apache.commons.lang3.exception.ExceptionUtilsTest$1","\tat org.apache.commons.lang3.exception.ExceptionUtilsTest.testgetStackFramesGappyPath(ExceptionUtilsTest.java:706)","\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","\tat com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)","\tat com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)"}, actual);

参考

  1. https://commons.apache.org/proper/commons-lang/apidocs/
标签: java apache 开源

本文转载自: https://blog.csdn.net/qq_23091073/article/details/126743040
版权归原作者 aabond 所有, 如有侵权,请联系我们删除。

“Java开源工具库使用之Apache commons-lang3”的评论:

还没有评论