Guavaのcom.google.common.base.Splitter
の利用サンプルです。
指定の文字列を分割する際に利用するクラスです。
String#split
がString[]を返却するのに対してSplitter#split
はIterable<String>を返却します。
以下のAPIなどを利用して分割処理を行います
Splitter#split
- 指定の文字列を分割してIterableを返却します。 Splitter#on
- 分割する際の区切り文字を指定します。Splitter#trimResults
- 分割する際にトリムを実行します。Splitter#omitEmptyStrings
- 分割後に空文字となった要素を返却値から除外します。Splitter#limit
- 分割する際の最大要素数を指定します。Splitter#fixedLength
- 文字列を分割する際の各要素の長さを指定します。Splitter.MapSplitter#split
- 文字列を分割してMap<String,String>を返却します。
サンプルコードで試したのは以下の通りです。
文字列を分割
■サンプル
String srcStr1 = "aaa,bbb, ccc,ddd "; Iterable<String> dest1 = Splitter.on(",") .split(srcStr1); System.out.println("dest1: " + dest1);
■実行結果
dest1: [aaa, bbb, ccc, ddd ]
文字列を分割+トリム
■サンプル
String srcStr2 = "aaa,bbb, ccc,ddd "; Iterable<String> dest2 = Splitter.on(",") .trimResults() .split(srcStr2); System.out.println("dest2: " + dest2);
■実行結果
dest2: [aaa, bbb, ccc, ddd]
文字列を分割+トリム(トリムする文字('_')を指定)
■サンプル
String srcStr3 = "aaa,bbb_,___ccc,ddd_ "; Iterable<String> dest3 = Splitter.on(",") .trimResults(CharMatcher.is('_')) .split(srcStr3); System.out.println("dest3: " + dest3);
■実行結果
dest3: [aaa, bbb, ccc, ddd_ ]
文字列を分割+トリム+空要素は除外
■サンプル
String srcStr4 = "aaa1,bbb2,ccc3, ,ddd4 ,"; // 空要素の除外なし Iterable<String> dest4_1 = Splitter.on(",") .trimResults() .split(srcStr4); // 空要素の除外あり Iterable<String> dest4_2 = Splitter.on(",") .trimResults() .omitEmptyStrings() .split(srcStr4); System.out.println("dest4_1(not execute omitEmptyStrings): " + dest4_1); System.out.println("dest4_2(execute omitEmptyStrings): " + dest4_2);
■実行結果
dest4_1(not execute omitEmptyStrings): [aaa1, bbb2, ccc3, , ddd4, ] dest4_2(execute omitEmptyStrings): [aaa1, bbb2, ccc3, ddd4]
分割する要素数の最大値を指定してから文字列を分割
■サンプル
String srcStr5 = "aaa,bbb,ccc,ddd,eeeeeeeeee"; // 最大3要素の分割に制限 Iterable<String> dest5 = Splitter.on(",") .limit(3) .split(srcStr5); System.out.println("dest5: " + dest5); // ちょっとこれだと分かりにくいですが・・
■実行結果
dest5: [aaa, bbb, ccc,ddd,eeeeeeeeee]
分割後の要素の長さを指定して文字列を分割
■サンプル
String srcStr6 = "A001B001C001D001E0002"; Iterable<String> dest6 = Splitter.fixedLength(4) .split(srcStr6); System.out.println("dest6: " + dest6);
■実行結果
dest6: [A001, B001, C001, D001, E000, 2]
文字列をMapに分割
■サンプル
String srcStr7 = "key1=value1 ; key2=value2 ; key3=value3"; Map<String, String> map = Splitter.on(";") .trimResults() .withKeyValueSeparator("=") .split(srcStr7); System.out.println("dest map : " + map);
■実行結果
dest map : {key1=value1, key2=value2, key3=value3}
試したソースコードの全体は以下です。
import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import java.util.Map; public class SplitterClient { public static void main(String[] args) { // カンマで文字列 を分割してみる System.out.println("### execute Splitter.on(\",\").split"); String srcStr1 = "aaa,bbb, ccc,ddd "; Iterable<String> dest1 = Splitter.on(",") .split(srcStr1); System.out.println("dest1: " + dest1); // カンマで文字列を分割+トリム を実施してみる System.out.println("### execute Splitter.on(\",\").trimResults.split"); String srcStr2 = "aaa,bbb, ccc,ddd "; Iterable<String> dest2 = Splitter.on(",") .trimResults() .split(srcStr2); System.out.println("dest2: " + dest2); // カンマで文字列を分割+トリム(トリムする文字('_')を指定) を実施してみる String srcStr3 = "aaa,bbb_,___ccc,ddd_ "; Iterable<String> dest3 = Splitter.on(",") .trimResults(CharMatcher.is('_')) .split(srcStr3); System.out.println("dest3: " + dest3); // カンマで文字列を分割+トリム+空要素は除外 を実施してみる System.out.println("### execute Splitter.on(\",\").trimResults.omitEmptyStrings.split"); String srcStr4 = "aaa1,bbb2,ccc3, ,ddd4 ,"; Iterable<String> dest4_1 = Splitter.on(",") .trimResults() .split(srcStr4); Iterable<String> dest4_2 = Splitter.on(",") .trimResults() .omitEmptyStrings() .split(srcStr4); System.out.println("dest4_1(not execute omitEmptyStrings): " + dest4_1); System.out.println("dest4_2(execute omitEmptyStrings): " + dest4_2); // カンマで文字列を分割+分割する要素数の最大値指定 を実施してみる System.out.println("### execute Splitter.on(\",\").limit.split"); String srcStr5 = "aaa,bbb,ccc,ddd,eeeeeeeeee"; Iterable<String> dest5 = Splitter.on(",") .limit(3) .split(srcStr5); System.out.println("dest5: " + dest5); // ちょっとこれだと分かりにくいですが・・ // 分割後の要素の長さを指定して文字列を分割する を実施してみる System.out.println("### execute Splitter.on(\",\").fixedLength.split"); String srcStr6 = "A001B001C001D001E0002"; Iterable<String> dest6 = Splitter.fixedLength(4) .split(srcStr6); System.out.println("dest6: " + dest6); // MapSplitterにより文字列をMapに分割する を実施してみる System.out.println("### execute Splitter.on(\",\").withKeyValueSeparator.split"); String srcStr7 = "key1=value1 ; key2=value2 ; key3=value3"; Map<String, String> map = Splitter.on(";") .trimResults() .withKeyValueSeparator("=") .split(srcStr7); System.out.println("dest map : " + map); } }