String input = "key1=value1&key2=value2&key3=value3&key4=value4&key5=value5";
如何使用HashMap
将键值对存储到StringTokenizer
对象中?
答案 0 :(得分: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);
请注意,您必须确保不允许在数据中显示分隔符(在本例中为“=”和“&amp;”)!当应该允许分隔符出现在数据中时,必须以某种方式对其进行转义以正确处理输入。
答案 1 :(得分:0)
我理解最初的问题是指StringTokenizer
的用法,但可以使用番石榴的Splitter
以更简单,更简洁的方式完成:
Map<String, String> map = ImmutableMap.copyOf(Splitter.on('&')
.withKeyValueSeparator("=")
.split(checkNotNull(input)));