2011-08-08 57 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))); 
相關問題