Guavaのcom.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); } }