Google Guava 快速入门 —— 【字符串处理】Joiner 连接器

Google Guava 快速入门.jpg

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> AappendTo(A appendable, Iterable<?> parts) 
将parts通过连接器的连接符连接成字符串,并拼接到appendable后。
<A extendsAppendable> AappendTo(A appendable, Iterator<?> parts) 
将parts通过连接器的连接符连接成字符串,并拼接到appendable后。
<A extendsAppendable> AappendTo(A appendable, Object[] parts) 
将parts通过连接器的连接符连接成字符串,并拼接到appendable后.
<A extendsAppendable> AappendTo(A appendable, @Nullable Object first, @Nullable Object second, Object... rest) 
将parts通过连接器的连接符连接成字符串,并拼接到appendable后.
StringBuilderappendTo(StringBuilder builder, Iterable<?> parts) 
将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder.
StringBuilderappendTo(StringBuilder builder, Iterator<?> parts) 
将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder.
StringBuilderappendTo(StringBuilder builder, Object[] parts) 
将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder.
StringBuilderappendTo(StringBuilder builder, @Nullable Object first, @Nullable Object second, Object... rest) 
将parts通过连接器的连接符连接成字符串,并拼接到builder后,返回StringBuilder.
Stringjoin(Iterable<?> parts) 
将parts通过连接器的连接符连接成字符串.
Stringjoin(Iterator<?> parts) 
将parts通过连接器的连接符连接成字符串.
Stringjoin(Object[] parts) 
将parts通过连接器的连接符连接成字符串.
Stringjoin(@Nullable Object first, @Nullable Object second, Object... rest) 
将parts通过连接器的连接符连接成字符串.
static Joineron(char separator) 
初始化Joiner连接器,separator为Joiner连接器的连接符.
static Joineron(String separator) 
初始化Joiner连接器,separator为Joiner连接器的连接符.
JoinerskipNulls() 
用于过滤集合中为null的元素,然后返回一个新的Joiner对象实例.
JoineruseForNull(String nullText) 
连接器做join连接操作时用nullText替换null元素值.
Joiner.MapJoinerwithKeyValueSeparator(char keyValueSeparator) 
初始化一个Map连接器,连接器连接Map对象时,keyValueSeparator为key和value之间的分隔符.
Joiner.MapJoinerwithKeyValueSeparator(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 连接器

点  赞 (0) 打  赏
分享到: