Guava Joiner 连接器
开发过程中,用分隔符连接字符串序列可能是一个比较繁琐的过程,但本不应该如此。Joiner 可以简化这个操作。
Joiner 提供了各种方法来处理字符串加入操作,对象等。
一、类声明
以下是 com.google.common.base.Joiner 类的声明:
@GwtCompatible public class Joiner extends Object
二、类方法
官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/base/Joiner.html
| 修饰符和类型 | 方法说明 | 
|---|---|
| <A extendsAppendable> A | appendTo(A appendable, Iterable<?> parts)将parts通过连接器的连接符连接成字符串,并拼接到appendable后。 | 
| <A extendsAppendable> A | appendTo(A appendable, Iterator<?> parts)将parts通过连接器的连接符连接成字符串,并拼接到appendable后。 | 
| <A extendsAppendable> A | appendTo(A appendable, Object[] parts)将parts通过连接器的连接符连接成字符串,并拼接到appendable后. | 
| <A extendsAppendable> A | appendTo(A appendable, @Nullable Object first, @Nullable Object second, Object... rest)将parts通过连接器的连接符连接成字符串,并拼接到appendable后. | 
| StringBuilder | appendTo(StringBuilder builder, Iterable<?> parts)将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder. | 
| StringBuilder | appendTo(StringBuilder builder, Iterator<?> parts)将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder. | 
| StringBuilder | appendTo(StringBuilder builder, Object[] parts)将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder. | 
| StringBuilder | appendTo(StringBuilder builder, @Nullable Object first, @Nullable Object second, Object... rest)将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder. | 
| String | join(Iterable<?> parts)将parts通过连接器的连接符连接成字符串. | 
| String | join(Iterator<?> parts)将parts通过连接器的连接符连接成字符串. | 
| String | join(Object[] parts)将parts通过连接器的连接符连接成字符串. | 
| String | join(@Nullable Object first, @Nullable Object second, Object... rest)将parts通过连接器的连接符连接成字符串. | 
| static Joiner | on(char separator)初始化Joiner连接器,separator为Joiner连接器的连接符. | 
| static Joiner | on(String separator)初始化Joiner连接器,separator为Joiner连接器的连接符. | 
| Joiner | skipNulls()用于过滤集合中为null的元素,然后返回一个新的Joiner对象实例. | 
| Joiner | useForNull(String nullText)连接器做join连接操作时用nullText替换null元素值. | 
| Joiner.MapJoiner | withKeyValueSeparator(char keyValueSeparator)初始化一个Map连接器,连接器连接Map对象时,keyValueSeparator为key和value之间的分隔符. | 
| Joiner.MapJoiner | withKeyValueSeparator(String keyValueSeparator)初始化一个Map连接器,连接器连接Map对象时,keyValueSeparator为key和value之间的分隔符. | 
三、Joiner 介绍
用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有 null,那连接操作会更难。Fluent 风格的 Joiner 让连接字符串更简单。
Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");上述代码返回:”Harry; Ron; Hermione”。
另外,useForNull(String) 方法可以给定某个字符串来替换 null,而不像 skipNulls() 方法是直接忽略 null。
Joiner 也可以用来连接对象类型,在这种情况下,它会把对象的 toString() 值连接起来。
Joiner.on(",").join(Arrays.asList(1, 5, 7)); // returns "1,5,7"注意: joiner实例总是不可变的。用来定义joiner目标语义的配置方法总会返回一个新的joiner实例。这使得joiner实例都是线程安全的,你可以将其定义为 static final 常量。
四、测试类
package com.example.guava.string_utilities;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import junit.framework.TestCase;
import java.io.File;
import java.io.FileWriter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class JoinTest extends TestCase {
    private final List<String> list = Arrays.asList("java", "php", "c#");
    private final List<String> listWithNull = Arrays.asList("java", "php", "c#", null);
    public void testJoin1() {
        String join = Joiner.on(":").join(list);
        System.out.println(join);   // java:php:c#
    }
    /**
     * null对象测试
     */
    public void testJoin2() {
        try {
            String join = Joiner.on(":").join(listWithNull);
            System.out.println(join);
        }catch (NullPointerException e){
        }
    }
    /**
     * null对象跳过
     */
    public void testJoin3() {
        String join = Joiner.on(":").skipNulls().join(listWithNull);
        System.out.println(join);   // java:php:c#
    }
    /**
     * null对象使用默认值
     */
    public void testJoin4() {
        String join = Joiner.on(":").useForNull("默认值").join(listWithNull);
        System.out.println(join);   // java:php:c#:默认值
    }
    /**
     * appendTo 拼接
     */
    public void testJoin5() {
        StringBuilder builder = new StringBuilder("Hello World");
        StringBuilder appendResult = Joiner.on(":").useForNull("默认值").appendTo(builder, listWithNull);
        System.out.println(appendResult);   // Hello Worldjava:php:c#:默认值
    }
    /**
     * appendTo 文件
     *
     * 将结果输出到文件中
     */
    public void testJoin6() {
        try (FileWriter writer = new FileWriter(new File("/Users/liurenkui/Desktop/temp.txt"))) {
            FileWriter fileWriter = Joiner.on(":").useForNull("默认值").appendTo(writer, listWithNull);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * MapJoiner 的使用,将 map 转换为字符串
     */
    public void testJoin7() {
        ImmutableMap<String, String> map = ImmutableMap.of("hello", "java", "hi", "python");
        String result = Joiner.on(";").withKeyValueSeparator("=").join(map);
        System.out.println(result); // hello=java;hi=python
    }
    /**
     * java8 测试 joining
     */
    public void testJoin8() {
        String collect = listWithNull.stream().filter(s -> s != null && !s.isEmpty()).collect(Collectors.joining(":"));
        System.out.println(collect);    // java:php:c#
    }
}五、相关文章
未经允许请勿转载:程序喵 » Google Guava 快速入门 —— 【字符串处理】Joiner 连接器
 程序喵
程序喵