一Joiner
测试
private final List<String> list1 = Arrays.asList(
"Google", "Guava", "Java", "Scala", "Kafka"
);
private final List<String> list2 = Arrays.asList(
"Google", "Guava", "Java", "Scala", null
);
private final Map<String, String> stringMap =
ImmutableMap.of("Hello", "Guava", "Java", "Scala");
1、将集合list1中的元素使用#连接起来,变为一个字符串
String result = Joiner.on("#").join(stringList);
System.out.printlln(result);
输出:Google#Guava#Java#Scala#Kafka
2、将集合list2中的元素使用#拼接起来,变为一个字符串,注意集合list2中的null元素
String result = Joiner.on("#").join(list2);
System.out.println(result);
输出:执行完成之后,将会抛出空指针异常: NullPointerException
解决方法:因为其中包含了null元素,那么如何避免呢?可以使用Guava的skipNulls方法跳过null元素,如下:
public void testJoinOnJoinWithNullValueButSkip() {
String result = Joiner.on("#")
.skipNulls().join(list2);
System.out.println(result);
}
正常输出:Google#Guava#Java#Scala
jdk8 stream:过滤掉null元素,然后使用#隔开,方法如下:
String result = list2.stream()
.filter(item -> item != null && !item.isEmpty())
.collect(Collectors.joining("#"));
System.out.println(result);
输出结果:"Google#Guava#Java#Scala"
将stringMap中的元素变为使用#隔开的key-value字符串,如:a=1#c=2,代码如下:
Map<String,Integer> map= new HashMap<>();
map.put("name",22);
map.put("age",23);
String result = Joiner.on("&") .withKeyValueSeparator("=").join(map);
//name=22&age=23
二、Splitter
//1、分割字符串为list
List<String> list = Splitter.on(",").splitToList("a,b,c,d");
System.out.println(list);
//2、过滤掉空字符串,但不包括空格
List<String> list1 = Splitter.on(",").omitEmptyStrings().splitToList("a,b,, ,c,d");
System.out.println("list1:" + list1);
//结果:[a, b, ,c, d]
//3、去掉字符串中的空格,再进行过滤空元素
List<String> list2 = Splitter.on(",").omitEmptyStrings().trimResults().splitToList("a,b,, ,c,d");
System.out.println("list2:" + list2);
//结果:[a, b, c, d]
//4、limit表示最多把字符串分隔成多少份
List<String> list3 = Splitter.on("#").omitEmptyStrings().trimResults().limit(2).splitToList("a#b#c#d");
System.out.println("list3:" + list3);
//结果:[a, b#c#d]
//5、字符串还原成map
// 将字串还原成map,是Joiner的逆向操作,注意:字符串的格式必须满足“a:1#b:2”这种格式,格式不对会导致还原map失败
Map<String,String> map = Splitter.on("#").omitEmptyStrings().trimResults().withKeyValueSeparator(":").split("a:1#b:2");
System.out.println("map:" + map);
//结果:map:{a=1, b=2}