1. 概述

Apache Commons Lang 3 库提供了对Java API核心类的操作支持。这个库的功能包括处理字符串、数字、日期、并发、对象反射等。

除了提供库的入门介绍,本教程还将演示如何使用StringUtils类,它主要用于操作String实例。

2. Maven依赖

要使用 Commons Lang 3 库,只需从中央Maven仓库添加以下依赖:

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

你可以在这里找到该库的最新版本:这里

3. StringUtils

StringUtils 类提供了对字符串进行安全操作的方法,即使它们可能为null

这个类的许多方法在java.lang.String类中也有定义,但这些方法并不支持null。本节将重点介绍String类中没有对应方法的几个功能。

4. containsAny 方法

containsAny 方法检查给定的String是否包含给定字符集中任一字符。这个字符集可以以Stringchar的形式传递。

下面的代码片段展示了使用该方法的两种重载版本,并验证了结果:

String string = "baeldung.com";
boolean contained1 = StringUtils.containsAny(string, 'a', 'b', 'c');
boolean contained2 = StringUtils.containsAny(string, 'x', 'y', 'z');
boolean contained3 = StringUtils.containsAny(string, "abc");
boolean contained4 = StringUtils.containsAny(string, "xyz");
 
assertTrue(contained1);
assertFalse(contained2);
assertTrue(contained3);
assertFalse(contained4);

5. containsIgnoreCase 方法

containsIgnoreCase 方法以不区分大小写的方式检查给定的String是否包含另一个String

以下代码片段验证了在忽略大小写的情况下,"baeldung.com"包含"BAELDUNG"

String string = "baeldung.com";
boolean contained = StringUtils.containsIgnoreCase(string, "BAELDUNG");
 
assertTrue(contained);

6. countMatches 方法

countMatches 方法计算给定String中指定字符或子串出现的次数。

以下示例确认在"welcome to www.baeldung.com"中,字符'w'出现了四次,而子串"com"出现了两次:

String string = "welcome to www.baeldung.com";
int charNum = StringUtils.countMatches(string, 'w');
int stringNum = StringUtils.countMatches(string, "com");
 
assertEquals(4, charNum);
assertEquals(2, stringNum);

7. 追加和前置方法

appendIfMissingappendIfMissingIgnoreCase 方法会在给定的String末尾追加后缀,如果它不以传入的任何后缀结尾(区分大小写和不区分大小写)。类似地,prependIfMissingprependIfMissingIgnoreCase 方法会在给定String开头添加前缀,如果它不以传入的任何前缀开始。

以下示例中,使用appendIfMissingprependIfMissing 方法向"baeldung.com"添加后缀和前缀,确保不会重复添加:

String string = "baeldung.com";
String stringWithSuffix = StringUtils.appendIfMissing(string, ".com");
String stringWithPrefix = StringUtils.prependIfMissing(string, "www.");
 
assertEquals("baeldung.com", stringWithSuffix);
assertEquals("www.baeldung.com", stringWithPrefix);

8. 字母大小写转换方法

String 类已经定义了将字符串所有字符转换为大写或小写的函数。本节仅展示其他方式改变字符串字母大小写的方法,如swapCasecapitalizeuncapitalize

swapCase 方法会交换字符串中字符的大写和小写:

String originalString = "baeldung.COM";
String swappedString = StringUtils.swapCase(originalString);
 
assertEquals("BAELDUNG.com", swappedString);

capitalize 方法将给定String的第一个字符转换为大写,其余字符保持不变:

String originalString = "baeldung";
String capitalizedString = StringUtils.capitalize(originalString);
 
assertEquals("Baeldung", capitalizedString);

uncapitalize 方法将给定String的第一个字符转换为小写,其余字符保持不变:

String originalString = "Baeldung";
String uncapitalizedString = StringUtils.uncapitalize(originalString);
 
assertEquals("baeldung", uncapitalizedString);

9. 反转方法

StringUtils 类定义了两个字符串反转方法:reversereverseDelimitedreverse 方法会重新排列字符串中的所有字符,而reverseDelimited 方法则按指定分隔符重组字符组。

以下代码片段反转字符串"baeldung"并验证结果:

String originalString = "baeldung";
String reversedString = StringUtils.reverse(originalString);
 
assertEquals("gnudleab", reversedString);

使用reverseDelimited 方法时,字符是按组而不是单个字符反转的:

String originalString = "www.baeldung.com";
String reversedString = StringUtils.reverseDelimited(originalString, '.');
 
assertEquals("com.baeldung.www", reversedString);

10. rotate() 方法

rotate() 方法将字符串中的字符循环移动指定位置。下面的代码片段将字符串"baeldung"向右移动四个位置并验证结果:

String originalString = "baeldung";
String rotatedString = StringUtils.rotate(originalString, 4);
 
assertEquals("dungbael", rotatedString);

11. difference 方法

difference 方法比较两个字符串,返回第二个字符串从与第一个字符串不同的位置开始剩余的部分。以下代码片段比较两个字符串"Baeldung Tutorials""Baeldung Courses",并在两个方向上验证结果:

String tutorials = "Baeldung Tutorials";
String courses = "Baeldung Courses";
String diff1 = StringUtils.difference(tutorials, courses);
String diff2 = StringUtils.difference(courses, tutorials);
 
assertEquals("Courses", diff1);
assertEquals("Tutorials", diff2);

12. 结论

本教程介绍了在Apache Commons Lang 3中处理字符串,并概述了我们可以从StringUtils类中使用的主API。所有示例和代码片段的实现可在GitHub项目中找到。