Guave是一个强大的的工具集合,今天给大家介绍一下,常用的拼接字符串的方法,当然JDK 也有方便的拼接字符串的方式,本文主要介绍guava的,可以对比使用
基本的拼接的话可以如下操作
@Test
public void test(){
final List list1 = Arrays.asList("a","b","c");
final String join1 = Joiner.on("#").join(list1);
assertThat(join1,equalTo("a#b#c"));
}
如果list 中含有null值,直接拼接会报错
可以使用如下的方式,跳过null值
@Test
public void test(){
final List list2 = Arrays.asList("a","b","c",null);
//skipNulls 跳过空值
final String join2 = Joiner.on("#").skipNulls().join(list2);
assertThat(join2,equalTo("a#b#c"));
}
或者是给null值设置一个默认值
@Test
public void testUseForNull(){
final List list2 = Arrays.asList("a","b","c",null);
final String aDefault = Joiner.on("#").useForNull("DEFAULT").join(list2);
assertThat(aDefault,equalTo("a#b#c#DEFAULT"));
}
拼接Map 键值对
@org.junit.Test
public void testWithKeyValueSeparator(){
Map map = new HashMap<>(16);
map.put("k1","v1");
map.put("k2","v2");
final String join = Joiner.on("#").withKeyValueSeparator("-").join(map);
System.out.println(join);
assertThat(join,equalTo("k1-v1#k2-v2"));
}
JDK 拼接字符串,也可以实现 去掉null值或者是给予默认值
@Test
public void testJDKContactStringWithNull() {
final List list1 = Arrays.asList("a", "b", "c", null, "d");
//会把null 转为字符串 "null",然后再拼接
/**
* 查看源码 Collectors::joining() ---> StringJoiner::add()
* prepareBuilder().append()--->AbstractStringBuilder::appendNull()
* appendNull 里面做的事情就是 插入了一个字符串 null,准确说是插入一个 charSequence null
*/
final String joinStr = list1.stream().collect(Collectors.joining("#"));
System.out.println(joinStr);
assertThat(joinStr.equals("a#b#c#null#d"), equalTo(true));
//如果想跳过null,可以使用filter
final String joinStrNoNull = list1.stream()
.filter(str -> StringUtils.isNoneBlank(str))
.collect(Collectors.joining("#"));
assertThat(joinStrNoNull.equals("a#b#c#d"), equalTo(true));
}
@Test
public void testJDKContactStringWithDefaultForNull() {
final List list1 = Arrays.asList("a", "b", "c", null, "d");
final String strWithDefault = list1.stream()
.map(str -> {
if (StringUtils.isEmpty(str)) {
str = "DEFAULT";
}
return str;
})
.collect(Collectors.joining("#"));
assertThat(strWithDefault.equals("a#b#c#DEFAULT#d"), equalTo(true));
}