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
是否包含给定字符集中任一字符。这个字符集可以以String
或char
的形式传递。
下面的代码片段展示了使用该方法的两种重载版本,并验证了结果:
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. 追加和前置方法
appendIfMissing
和 appendIfMissingIgnoreCase
方法会在给定的String
末尾追加后缀,如果它不以传入的任何后缀结尾(区分大小写和不区分大小写)。类似地,prependIfMissing
和 prependIfMissingIgnoreCase
方法会在给定String
开头添加前缀,如果它不以传入的任何前缀开始。
以下示例中,使用appendIfMissing
和 prependIfMissing
方法向"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
类已经定义了将字符串所有字符转换为大写或小写的函数。本节仅展示其他方式改变字符串字母大小写的方法,如swapCase
、capitalize
和 uncapitalize
。
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
类定义了两个字符串反转方法:reverse
和 reverseDelimited
。reverse
方法会重新排列字符串中的所有字符,而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项目中找到。