0
String input = "key1=value1&key2=value2&key3=value3&key4=value4&key5=value5";

如何使用 将键值对存储到HashMap对象中StringTokenizer

4

2 回答 2

3

我猜使用 StringTokenizer 看起来像这样。

String input = "key1=value1&key2=value2&key3=value3&key4=value4&key5=value5";
StringTokenizer st = new StringTokenizer(input, "&");

Map<String, String> map = new HashMap<String, String>();

while ( st.hasMoreElements() ) {

    String actualElement = st.nextToken();
    StringTokenizer et = new StringTokenizer(actualElement, "=");

    if ( et.countTokens() != 2 ) {
        throw new RuntimeException("Unexpeced format");
    }

    String key = et.nextToken();
    String value = et.nextToken();

    map.put(key, value);
}

System.out.println(map);

您也可以使用 String.split()。在我看来,它看起来更好一些。

Map<String, String> map = new HashMap<String, String>();

for ( String actualElement : input.split("&") ) {
    map.put(actualElement.split("=")[0],
            actualElement.split("=")[1]);
}

System.out.println(map);

请注意,您必须确保分隔符(在本例中为“=”和“&”)不允许出现在数据中!当应允许分隔符出现在数据中时,必须以某种方式对其进行转义以正确处理输入。

于 2012-03-26T20:50:42.293 回答
0

我知道最初的问题是指的用法,StringTokenizer但可以使用Splitterfrom guava 以更简单和简洁的方式完成:

Map<String, String> map = ImmutableMap.copyOf(Splitter.on('&')
.withKeyValueSeparator("=")
.split(checkNotNull(input)));
于 2017-05-04T13:19:46.067 回答