--- title: GuavaのMapSplitterが便利 tags: [] categories: ["Programming", "Java", "com", "google", "common", "base", "Splitter", "MapSplitter"] date: 2013-10-08T00:21:55Z updated: 2013-10-08T00:21:55Z --- Google Guavaの[MapSplitter][1]が便利だった。`String` -> `Map` の変換が簡単 import java.util.Map; import com.google.common.base.Splitter; public class Main { public static void main(String[] args) { Map params = Splitter.on(";") .withKeyValueSeparator("=").split( "username=aaaa;password=bbb;url=dddd"); System.out.println(params); // {username=aaaa, password=bbb, url=dddd} } } trimしたい場合は`trimResults()`を挟む import java.util.Map; import com.google.common.base.Splitter; public class Main { public static void main(String[] args) { Map params = Splitter.on(";").trimResults() .withKeyValueSeparator("=").split( "username=aaaa; password=bbb; url=dddd"); System.out.println(params); // {username=aaaa, password=bbb, url=dddd} } } `withKeyValueSeparator("=")`は `withKeyValueSeparator(Splitter.on("="))`の略で内と外の`Splitter`を別々に設定できる。 [LTSV][2]のパースも簡単ですね import java.util.Map; import com.google.common.base.Splitter; public class Main { public static void main(String[] args) { Map params = Splitter .on("\t") .withKeyValueSeparator(Splitter.on(":").limit(2)) .split("host:127.0.0.1\tident:-\tuser:frank\ttime:[10/Oct/2000:13:55:36 -0700]\treq:GET /apache_pb.gif HTTP/1.0\tstatus:200\tsize:2326\treferer:http://www.example.com/start.html\tua:Mozilla/4.08 [en] (Win98; I ;Nav)"); System.out.println(params); } } 出力結果 {host=127.0.0.1, ident=-, user=frank, time=[10/Oct/2000:13:55:36 -0700], req=GET /apache_pb.gif HTTP/1.0, status=200, size=2326, referer=http://www.example.com/start.html, ua=Mozilla/4.08 [en] (Win98; I ;Nav)} [1]: http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/base/Splitter.MapSplitter.html [2]: http://ltsv.org/