IK.AM

@making's tech note


GuavaのMapSplitterが便利

🗃 {Programming/Java/com/google/common/base/Splitter/MapSplitter}
🗓 Updated at 2013-10-08T00:21:55Z  🗓 Created at 2013-10-08T00:21:55Z   🌎 English Page

Google GuavaのMapSplitterが便利だった。String -> Map<String, String> の変換が簡単

import java.util.Map;

import com.google.common.base.Splitter;

public class Main {

    public static void main(String[] args) {
        Map<String, String> 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<String, String> 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のパースも簡単ですね

import java.util.Map;

import com.google.common.base.Splitter;

public class Main {

    public static void main(String[] args) {
        Map<String, String> 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)}

✒️️ Edit  ⏰ History  🗑 Delete