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 连接器