覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。 twitter: @yyoshikaw

com.google.common.base.Joiner

Guavacom.google.common.base.Joinerの利用サンプルです。
Joinerは区切り文字で文字列連結する機能を提供してくれます。

基本的に以下のAPIなどを利用して連結処理を行います

  • Joiner#on - 区切り文字の指定
  • Joiner#skipNulls - 連結対象のオブジェクトの中にnullがあった場合に連結対象から外す
  • Joiner#join - 対象オブジェクト(配列、Collection等)を文字列連結する
  • Joiner#useForNull - 対象のオブジェクトの中にnullがあった場合に指定の文字列に置き換える
  • Joiner#withKeyValueSeparator - keyとvalueの区切り文字列を指定してMapJoinerを返却する
  • Joiner#appendTo - StringBuilderに対象オブジェクト(配列、Collection等)を文字列連結する

サンプルコードで試したのは以下の通りです。


カンマで文字列配列を連結

■サンプル

// (skipNullsを指定しないとnullが存在する場合にNullPointerExceptionがスローされる)
String[] array = new String[]{"taro", "jiro", null, "shiro"};
String joinedStr1 = Joiner.on(",").skipNulls().join(array);
System.out.println("joinedStr1: " + joinedStr1);

■実行結果

joinedStr1: taro,jiro,shiro


コロンで指定文字列配列を連結

■サンプル

// コロンで指定文字列配列を連結してみる
List<String> list1 = Arrays.asList("taro", "jiro", "saburo");
String joinedStr2 = Joiner.on(":").skipNulls().join(list1);
System.out.println("joinedStr2: " + joinedStr2);

■実行結果

joinedStr2: taro:jiro:saburo


コロンで指定文字列配列を連結(null要素を特定文字列に置換)

■サンプル

// コロンで指定文字列配列を連結してみる
// nullの要素に対してuseForNullで特定の文字列に置き換えるように指定する
List<String> list2 = Arrays.asList("taro", "jiro", null, "shiro");
String joinedStr3 = Joiner.on(":").useForNull("[null]").join(list2);
System.out.println("joinedStr3: " + joinedStr3);

■実行結果

joinedStr3: taro:jiro:[null]:shiro


Map内のすべてのkeyとvalueを連結

■サンプル

// Map内のすべてのkeyとvalueを連結してみる
Map<Integer, String> map = new HashMap<>();
map.put(1, "ken");
map.put(2, "jon");
map.put(3, null);
Joiner.MapJoiner joiner = Joiner.on(", ").withKeyValueSeparator(" : ").useForNull("not registered");
String joinedStr4 = joiner.join(map);
System.out.println("joinedStr4: " + joinedStr4);

■実行結果

joinedStr4: 1 : ken, 2 : jon, 3 : not registered


StringBuilderに指定の文字列Listの値をすべて追加

■サンプル

// appendToでStringBuilderに指定の文字列Listの値をすべて付け加えてみる
List<String> list3 = Arrays.asList("abc", "def", "ghi");
StringBuilder sb = new StringBuilder("start -> ");
StringBuilder sb1 = Joiner.on(":").appendTo(sb, list3);
System.out.println("sb1: " + sb1);

■実行結果

sb1: start -> abc:def:ghi




試したソースコードの全体は以下です。

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.common.base.Joiner;

public class JoinerClient {

    public static void main(String[] args) {

        // カンマで文字列配列を連結してみる
        // (skipNullsを指定しないとnullが存在する場合にNullPointerExceptionがスローされる)
        String[] array = new String[]{"taro", "jiro", null, "shiro"};
        String joinedStr1 = Joiner.on(",").skipNulls().join(array);
        System.out.println("joinedStr1: " + joinedStr1);

        // コロンで指定文字列配列を連結してみる
        List<String> list1 = Arrays.asList("taro", "jiro", "saburo");
        String joinedStr2 = Joiner.on(":").skipNulls().join(list1);
        System.out.println("joinedStr2: " + joinedStr2);

        // コロンで指定文字列配列を連結してみる
        // nullの要素に対してuseForNullで特定の文字列に置き換えるように指定する
        List<String> list2 = Arrays.asList("taro", "jiro", null, "shiro");
        String joinedStr3 = Joiner.on(":").useForNull("[null]").join(list2);
        System.out.println("joinedStr3: " + joinedStr3);

        // Map内のすべてのkeyとvalueを連結してみる
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "ken");
        map.put(2, "jon");
        map.put(3, null);
        Joiner.MapJoiner joiner = Joiner.on(", ").withKeyValueSeparator(" : ").useForNull("not registered");
        String joinedStr4 = joiner.join(map);
        System.out.println("joinedStr4: " + joinedStr4);

        // appendToでStringBuilderに指定の文字列Listの値をすべて付け加えてみる
        List<String> list3 = Arrays.asList("abc", "def", "ghi");
        StringBuilder sb = new StringBuilder("start -> ");
        StringBuilder sb1 = Joiner.on(":").appendTo(sb, list3);
        System.out.println("sb1: " + sb1);
    }

}



関連エントリ