一、判断字符串是否为空
old:
if (null == str || str.isEmpty()) { }
使用 StringUtils ,上面代码可以替换下面这样:
if (StringUtils.isEmpty(str)) { }
StringUtils 内部还有一个方法 isBlank
,也是用来判断字符串是否为空,两个方法比较相近,比较搞混,主要区别如下:
// 如果字符串都是空格的话, StringUtils.isBlank(" ") = true; StringUtils.isEmpty(" ") = false;
二、字符串固定长度
这个通常用于字符串需要固定长度的场景,比如需要固定长度字符串作为流水号,若流水号长度不足,,左边补 0 。
// 字符串固定长度 8位,若不足,往左补 0 StringUtils.leftPad("test", 8, "0");
另外还有一个 StringUtils#rightPad
,这个方法与上面方法正好相反。
StringUtils.rightPad("test", 8, "0");
三、字符串关键字替换
StringUtils
提供一些列的方法,可以替换某些关键字:
// 默认替换所有关键字 StringUtils.replace("aba", "a", "z") // "zbz"; // 替换关键字,仅替换一次 StringUtils.replaceOnce("aba", "a", "z") // "zba"; // 使用正则表达式替换 StringUtils.replacePattern("ABCabc123", "[^A-Z0-9]+", "") // "ABC123";
四、字符串拼接
字符串拼接是个常见的需求,简单办法使用 StringBuilder
循环遍历拼接:
String[] array = new String[]{"test", "1234", "5678"}; StringBuilder stringBuilder = new StringBuilder(); for (String s : array) { stringBuilder.append(s).append(";"); } // 防止最终拼接字符串为空 if (stringBuilder.length() > 0) { stringBuilder.deleteCharAt(stringBuilder.length() - 1); } System.out.println(stringBuilder.toString());
上面业务代码不太难,但是需要注意一下上面这段代码非常容易出错,容易抛出 StringIndexOutOfBoundsException
。
这里我们可以直接使用以下方法获取拼接之后字符串:
StringUtils.join(["a", "b", "c"], ",") // "a,b,c"
StringUtils
只能传入数组拼接字符串,不过我比较喜欢集合拼接,所以再推荐下 Guava 的 Joiner
。
String[] array = new String[]{"test", "1234", "5678"}; List<String> list=new ArrayList<>(); list.add("test"); list.add("1234"); list.add("5678"); StringUtils.join(array, ","); // 逗号分隔符,跳过 null Joiner joiner=Joiner.on(",").skipNulls(); joiner.join(array); joiner.join(list);
System.out.println(Joiner.on(",").withKeyValueSeparator("=").join(ImmutableMap.of(array, list)));
System.out.println(ImmutableMap.of(array, list));
五、字符串拆分
StringUtils.split("a..b.c", '.') = ["a", "b", "c"] StringUtils.splitByWholeSeparatorPreserveAllTokens("a..b.c", ".")= ["a","", "b", "c"]
ps:注意以上两个方法区别。
StringUtils
拆分之后得到是一个数组,我们可以使用 Guava 的
Splitter splitter = Splitter.on(","); // 返回是一个 List 集合,结果:[ab, , b, c] splitter.splitToList("ab,,b,c"); // 忽略空字符串,输出结果 [ab, b, c] splitter.omitEmptyStrings().splitToList("ab,,b,c")