在日常的编程工作中,字符串(String)处理是一个非常常见且重要的任务。无论是字符串的判空、截取、转换大小写、分隔、比较,还是去除多余空格、拼接、使用正则表达式等操作,都需要我们编写大量的代码来处理各种边界情况,以避免出现异常。
为了简化这些常见的字符串操作,Apache Commons Lang3 库提供了一个非常强大的工具类:StringUtils
。这个工具类包含了大量实用的静态方法,可以帮助我们更高效、更安全地处理字符串。
1 引入依赖
首先,我们需要在项目中引入 Apache Commons Lang3 库。如果你使用 Maven 来管理依赖,可以在 pom.xml
文件中添加以下依赖:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency>
2 字符串判空
在实际开发中,字符串的判空是一个非常常见的操作。空字符串不仅仅包括 null
,还包括 ""
、" "
、"null"
等多种情况。StringUtils
提供了多个方法来处理这些情况:
isEmpty(CharSequence cs)
:判断字符串是否为空或长度为 0。isNotEmpty(CharSequence cs)
:判断字符串是否不为空且长度不为 0。isBlank(CharSequence cs)
:判断字符串是否为空、长度为 0 或仅包含空白字符。isNotBlank(CharSequence cs)
:判断字符串是否不为空、长度不为 0 且不包含空白字符。
示例代码:
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "abc";System.out.println(StringUtils.isEmpty(str1)); // true
System.out.println(StringUtils.isEmpty(str2)); // true
System.out.println(StringUtils.isEmpty(str3)); // false
System.out.println(StringUtils.isEmpty(str4)); // falseSystem.out.println(StringUtils.isNotEmpty(str1)); // false
System.out.println(StringUtils.isNotEmpty(str2)); // false
System.out.println(StringUtils.isNotEmpty(str3)); // true
System.out.println(StringUtils.isNotEmpty(str4)); // trueSystem.out.println(StringUtils.isBlank(str1)); // true
System.out.println(StringUtils.isBlank(str2)); // true
System.out.println(StringUtils.isBlank(str3)); // true
System.out.println(StringUtils.isBlank(str4)); // falseSystem.out.println(StringUtils.isNotBlank(str1)); // false
System.out.println(StringUtils.isNotBlank(str2)); // false
System.out.println(StringUtils.isNotBlank(str3)); // false
System.out.println(StringUtils.isNotBlank(str4)); // true
推荐优先使用 isBlank
和 isNotBlank
方法,因为它们会考虑空白字符的情况。
3 分隔字符串
在处理字符串分隔时,直接使用 String
类的 split
方法可能会导致空指针异常。StringUtils
提供了更安全的 split
方法:
String str1 = null;
System.out.println(StringUtils.split(str1, ",")); // null
System.out.println(str1.split(",")); // 抛出 NullPointerException
4 判断是否纯数字
有时候我们需要判断一个字符串是否为纯数字。StringUtils
提供了 isNumeric
方法来实现这一功能:
String str1 = "123";
String str2 = "123q";
String str3 = "0.33";System.out.println(StringUtils.isNumeric(str1)); // true
System.out.println(StringUtils.isNumeric(str2)); // false
System.out.println(StringUtils.isNumeric(str3)); // false
5 将集合拼接成字符串
在某些场景下,我们需要将一个集合的内容拼接成一个字符串。StringUtils
提供了 join
方法来实现这一功能:
List<String> list = Lists.newArrayList("a", "b", "c");
List<Integer> list2 = Lists.newArrayList(1, 2, 3);System.out.println(StringUtils.join(list, ",")); // a,b,c
System.out.println(StringUtils.join(list2, " ")); // 1 2 3
6 其他常用方法
除了上述方法外,StringUtils
还提供了许多其他实用的方法,例如:
trim(String str)
:去除字符串首尾的空白字符。trimToEmpty(String str)
:去除字符串首尾的空白字符,如果字符串为null
,则返回空字符串。trimToNull(String str)
:去除字符串首尾的空白字符,如果结果为空字符串,则返回null
。equals(String str1, String str2)
:比较两个字符串是否相等。equalsIgnoreCase(String str1, String str2)
:比较两个字符串是否相等,忽略大小写。startsWith(String str, String prefix)
:检查字符串是否以指定的前缀开头。endsWith(String str, String suffix)
:检查字符串是否以指定的后缀结尾。contains(String str, CharSequence seq)
:检查字符串是否包含指定的字符序列。indexOf(String str, CharSequence seq)
:返回指定字符序列在字符串中首次出现的索引,如果没有找到,则返回 -1。lastIndexOf(String str, CharSequence seq)
:返回指定字符序列在字符串中最后一次出现的索引,如果没有找到,则返回 -1。substring(String str, int start, int end)
:截取字符串中指定范围的子串。replace(String str, String searchString, String replacement)
:替换字符串中所有出现的搜索字符串为指定的替换字符串。replaceAll(String str, String regex, String replacement)
:使用正则表达式替换字符串中所有匹配的部分。join(Iterable<?> iterable, String separator)
:使用指定的分隔符将可迭代对象中的元素连接为一个字符串。split(String str, String separator)
:使用指定的分隔符将字符串分割为一个字符串数组。capitalize(String str)
:将字符串的第一个字符转换为大写。uncapitalize(String str)
:将字符串的第一个字符转换为小写。
7 总结
StringUtils
工具类提供了丰富的字符串处理方法,能够帮助我们简化代码、提高开发效率,并且避免常见的字符串操作错误。在日常开发中,合理利用这些方法可以显著提升代码的可读性和健壮性。
8 思维导图
9 参考链接
Apache StringUtils:专为Java字符串而生的工具类