背景

  目前Google Guava在实际应用中非常广泛,本篇是我对 Guava 使用的认识以及在项目中的经验来给大家分享!

  学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码!

  以面向对象思想处理字符串:Joiner/Splitter/CharMatcher

问题

  有朋友就要问了,jdk 提供的 String 还不够好吗?

  也许还不够友好,至少让我们用起来还不够爽,还得操心!

  举个栗子,比如String提供的split方法,我们得关心空字符串吧,还得考虑返回的结果中存在null元素吧,只提供了前后trim的方法(如果我想对中间元素进行trim呢)。

  guava 使用起来就不需要考虑这么多,好,那我们开始进入正式主题。

Joiner/Splitter

  Joiner是连接器,Splitter是分割器,通常我们会把它们定义为 static final,利用 on 生成对象后,在应用到 String 进行处理,这是可以复用的。

  要知道 apache commons StringUtils 提供的都是 static method。

  更加重要的是,guava提供的 Joiner/Splitter 是经过充分测试,它的稳定性和效率要比apache高出不少,这个你可以自行测试下~发现没有我们想对String做什么操作,就是生成自己定制化的 Joiner/Splitter,多么直白,简单,流畅的API!

  对于Joiner,常用的方法是 跳过NULL元素:skipNulls() ;

  对于NULL元素使用其他替代:useForNull(String)。

  对于Splitter,常用的方法是:trimResults() / omitEmptyStrings()。

  注意拆分的方式,有字符串,还有正则,还有固定长度分割(太贴心了!)

Joiner 应用案例

将集合按指定字符拼接成字符串

private final List<String> stringList = Arrays.asList(
        "tom","jack","bob");

private final List<String> stringListWithNullValue = Arrays.asList(
        "tom","jack","bob",null,"rose");

@Test
public void testJoin(){
    String join = Joiner.on("#").join(stringList);
    assertThat(join,equalTo("tom#jack#bob"));
}

// 跳过list中的null
@Test
public void testJoinOnJoinSkipNull(){
    String join = Joiner.on("#").skipNulls().join(stringListWithNullValue);
    assertThat(join,equalTo("tom#jack#bob#rose"));
}

// 替换null为指定字符
@Test
public void testJoinOnJoinUseForNull(){
    String join = Joiner.on("#").useForNull("NULL").join(stringListWithNullValue);
    assertThat(join,equalTo("tom#jack#bob#NULL#rose"));
}

// appendTo
@Test
public void testJoinOnJoinAppendTo(){
    final StringBuilder buffer = new StringBuilder("TEST");
    StringBuilder buffer_new = Joiner.on("#").appendTo(buffer, stringList);
    assertThat(buffer_new.toString(),equalTo("TESTtom#jack#bob"));
}

private final Map<String,String> stringMap = ImmutableMap.of("a","b","c","d");

/**
 * 对Map kv拆分
 */
@Test
public void testJoinOnWithMap(){
    assertThat(Joiner.on("#").withKeyValueSeparator("=").join(stringMap),equalTo("a=b#c=d"));
}
Joiner示例

相关文章: