(String)在我们的日常工作中,用得非常非常非常多。
在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。
如果只用 String 类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。
现在有个好消息是:org.apache.commons.lang3
包下的StringUtils
工具类,给我们提供了非常丰富的选择。
Maven 坐标:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
StringUtils 提供了非常多实用的方法,大概有下图的四页到五页,我只截了两页,实在是太多了。
接下来,我们来拿一些常用的方法举例说明。
字符串判空
其实空字符串,不只是 null 一种,还有""," ","null"等等,多种情况。
StringUtils 给我们提供了多个判空的静态方法,例如:
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "abc";
System.out.println(StringUtils.isEmpty(str1));
System.out.println(StringUtils.isEmpty(str2));
System.out.println(StringUtils.isEmpty(str3));
System.out.println(StringUtils.isEmpty(str4));
System.out.println("=====");
System.out.println(StringUtils.isNotEmpty(str1));
System.out.println(StringUtils.isNotEmpty(str2));
System.out.println(StringUtils.isNotEmpty(str3));
System.out.println(StringUtils.isNotEmpty(str4));
System.out.println("=====");
System.out.println(StringUtils.isBlank(str1));
System.out.println(StringUtils.isBlank(str2));
System.out.println(StringUtils.isBlank(str3));
System.out.println(StringUtils.isBlank(str4));
System.out.println("=====");
System.out.println(StringUtils.isNotBlank(str1));
System.out.println(StringUtils.isNotBlank(str2));
System.out.println(StringUtils.isNotBlank(str3));
System.out.println(StringUtils.isNotBlank(str4));
执行结果:
true
true
false
false
=====
false
false
true
true
=====
true
true
true
false
=====
false
false
false
true
示例中的:isEmpty
、isNotEmpty
、isBlank
和isNotBlank
,这 4 个判空方法你们可以根据实际情况使用。
优先推荐使用isBlank
和isNotBlank
方法,因为它会把" "
也考虑进去。
分隔字符串
分隔字符串是常见需求,如果直接使用 String 类的 split 方法,就可能会出现空指针异常。
String str1 = null;
System.out.println(StringUtils.split(str1,","));
System.out.println(str1.split(","));
执行结果:
null
Exception in thread "main" java.lang.NullPointerException
\tat com.sue.jump.service.test1.UtilTest.main(UtilTest.java:21)
使用 StringUtils 的 split 方法会返回 null,而使用 String 的 split 方法会报指针异常。
判断是否纯数字
给定一个字符串,判断它是否为纯数字,可以使用isNumeric
方法。例如:
String str1 = "123";
String str2 = "123q";
String str3 = "0.33";
System.out.println(StringUtils.isNumeric(str1));
System.out.println(StringUtils.isNumeric(str2));
System.out.println(StringUtils.isNumeric(str3));
执行结果:
true
false
false
将集合拼接成字符串
有时候,我们需要将某个集合的内容,拼接成一个字符串,然后输出,这时可以使用join
方法。例如:
List<String> list = Lists.newArrayList("a", "b", "c");
List<Integer> list2 = Lists.newArrayList(1, 2, 3);
System.out.println(StringUtils.join(list, ","));
System.out.println(StringUtils.join(list2, " "));
执行结果:
a,b,c
1 2 3
其他方法
这里再列举一些,其他的方法可以自己去研究一下。
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)
:将字符串的第一个字符转换为小写。