2011-08-08 27 views

回答

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); 

要注意的是,你必须确保分隔符(在这种情况下“=”和“&”)是不允许出现在数据!当应该允许分隔符出现在数据中时,它们必须以某种方式被转义以正确处理输入。

0

据我所知,最初的问题被提及的StringTokenizer使用,但它可以与Splitter更容易和简洁的方式来完成从番石榴:

Map<String, String> map = ImmutableMap.copyOf(Splitter.on('&') 
.withKeyValueSeparator("=") 
.split(checkNotNull(input))); 
相关问题