Guava base -- Joiner

Guava全文介绍地址:Google Guava

这次主要介绍是的是com.google.common.base.Joiner。我想做为一个程序员我们每天和String打交道的时候是会占很多时间的吧。以任意的字符串和与一些分隔符标记连接在一起也是我们工作中经常要遇到的问题。但是用Guava--Joiner,它会让我们更加优雅的编码。它通常涉及把一个数组,列表,或者一个iterable和循环的内容,添加StringBuilder类项目,添加分隔符。先把Joiner的方法简单的描述一下。

A<A extends Appendable> appendTo(A appendable, Iterable<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterable类型parts解析后的字符串

A <A extends Appendable> appendTo(A appendable, Iterator<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterator类型parts解析后的字符串

A <A extends Appendable> appendTo(A appendable, Object[] parts)
用来存在放通过解析预先配置的分隔符后与Object[]类型parts解析后的字符串

A <A extends Appendable> appendTo(A appendable, Object first, Object second, Object... rest)
用来存在放通过解析预先配置的分隔符后与Object...类型parts解析后的字符串

StringBuilder appendTo(StringBuilder builder, Iterable<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterable类型parts解析后的字符串

StringBuilder appendTo(StringBuilder builder, Iterator<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterator类型parts解析后的字符串

StringBuilder appendTo(StringBuilder builder, Object[] parts)
用来存在放通过解析预先配置的分隔符后与Object[]类型parts解析后的字符串

StringBuilder appendTo(StringBuilder builder, Object first, Object second, Object... rest)
用来存在放通过解析预先配置的分隔符后与Object...类型parts解析后的字符串

String	join(Iterable<?> parts)
返回一个String在Iterable<?> parts每个数据中间添加上基于之前配置的分隔符

String	join(Iterator<?> parts)
返回一个String在Iterator<?> parts每个数据中间添加上基于之前配置的分隔符

String	join(Object[] parts)
返回一个String在Object[] parts每个数据中间添加上基于之前配置的分隔符

String	join(Object first, Object second, Object... rest)
返回一个String在Object... parts每个数据中间添加上基于之前配置的分隔符

static Joiner on(char separator)
返回一个Joiner对象用来自己替换在连接的元素中char类型分隔符

static Joiner on(String separator)
返回一个Joiner对象用来自己替换在连接的元素中String类型分隔符

Joiner	skipNulls()
返回一个Joiner对象但是会跳过连接元素中为null的元素

Joiner	useForNull(String nullText)
返回一个Joiner对象但是会把为null的元素替换为String类型的nullText

Joiner.MapJoiner withKeyValueSeparator(String keyValueSeparator)
返回一个MapJoiner对象,用于添加到间隔Map中的Entity(而on()方法是替换key与value之间)。是Splitter.withKeyValueSeparator()的逆运算。

然后大家就可以对照下面的例子来理解这个类的用法了。

public class JoinerTest {
    
    @Test
    public void testMapJoiner() {
        //Using LinkedHashMap so that the original order is preserved
        String expectedString = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
        Map<String,String> testMap = Maps.newLinkedHashMap();
        testMap.put("Washington D.C","Redskins");
        testMap.put("New York City","Giants");
        testMap.put("Philadelphia","Eagles");
        testMap.put("Dallas","Cowboys");
        String returnedString = Joiner.on("#").withKeyValueSeparator("=").join(testMap);
        assertThat(returnedString,is(expectedString));
    }

    @Test
    public void testJoinStrings(){
        String[] values = new String[]{"foo", "bar","baz"};
        String returned = Joiner.on("|").join(values);
        assertThat(returned,is("foo|bar|baz"));
    }

    @Test
    public void testJoinStringBuilder(){
        String[] values = new String[]{"foo", "bar","baz"};
        StringBuilder builder = new StringBuilder();
        StringBuilder returned = Joiner.on("|").appendTo(builder,values);
        assertThat(returned,is(builder));
        assertThat(returned.toString(),is("foo|bar|baz"));
    }

    @Test
    public void testJoinFileWriter() throws Exception{
        File tempFile = new File("testTempFile.txt");
        tempFile.deleteOnExit();
        CharSink charSink = Files.asCharSink(tempFile, Charsets.UTF_8);
        Writer writer = charSink.openStream();
        String[] values = new String[]{"foo", "bar","baz"};
        Joiner.on("|").appendTo(writer,values);
        writer.flush();
        writer.close();
        String fromFileString = Files.toString(tempFile,Charsets.UTF_8);
        assertThat(fromFileString,is("foo|bar|baz"));

    }

    @Test
    public void testJoinStringsSkipNull(){
        String[] values = new String[]{"foo",null,"bar"};
        String returned = Joiner.on("#").skipNulls().join(values);
        assertThat(returned,is("foo#bar"));
    }

    @Test
    public void testJoinStringsUseForNull(){
        String[] values = new String[]{"foo",null,"bar"};
        String returned = Joiner.on("#").useForNull("missing").join(values);
        assertThat(returned,is("foo#missing#bar"));
    }

    @Test (expected = NullPointerException.class)
    public void testJoinStringsNoNullHandler(){
        String[] values = new String[]{"foo",null,"bar"};
        Joiner.on("#").join(values);
        fail("Should not get here");
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值