split提供了两个参数,第一个参数是拆分的标准字符,第二个参数是limit,即需要拆分成几个元素。需要注意的是,拆分结果是返回一个字符串类型的数组String[],而不是String;
具体示例如下:
可以的到结论是拆分结果里不会出现被拆分的字段,同时还受limit参数的影响。
另外拆分对象中存在空值的时候并不会去除而是同样保留下来,示例如下:
但平时需求中通常不需要保留空值(虽然也有trim,但是只能去除前后的空格),这时就需要用到第三方的开源API——Guava。
以下是网上找到的相关知识与学习链接。
String a =",a, , b c ,";
// Splitter 是 Guava 提供的 API
List<String> list = Splitter.on(',')
.trimResults()// 去掉空格
.omitEmptyStrings()// 去掉空值
.splitToList(a);
log.info("Guava 去掉空格的分割方法:{}",JSON.toJSONString(list));
// 打印出的结果为:
["a","b c"]
学习链接
合并我们使用 join 方法,此方法是静态的,我们可以直接使用。方法有两个入参,参数一是合并的分隔符,参数二是合并的数据源,数据源支持数组和 List,在使用的时候,我们发现有两个不太方便的地方:
不支持依次 join 多个字符串,比如我们想依次 join 字符串 s 和 s1,如果你这么写的话 String.join(",",s).join(",",s1) 最后得到的是 s1 的值,第一次 join 的值被第二次 join 覆盖了;
如果 join 的是一个 List,无法自动过滤掉 null 值。
而 Guava 正好提供了 API,解决上述问题,演示如下:
// 依次 join 多个字符串,Joiner 是 Guava 提供的 API
Joiner joiner = Joiner.on(",").skipNulls();
String result = joiner.join("hello",null,"china");
log.info("依次 join 多个字符串:{}",result);
List<String> list = Lists.newArrayList(new String[]{"hello","china",null});
log.info("自动删除 list 中空值:{}",joiner.join(list));
// 输出的结果为;
依次 join 多个字符串:hello,china
自动删除 list 中空值:hello,china
Guava 不仅仅支持多个字符串的合并,还去掉了 List 中的空值。