如何将String转换为Map:
Map m = convert("A=4 H=X PO=87"); // What's convert?
System.err.println(m.getClass().getSimpleName()+m);
Run Code Online (Sandbox Code Playgroud)
预期产量:
HashMap{A=4, H=X, PO=87}
Run Code Online (Sandbox Code Playgroud)
Dan*_*lan 57
没有必要重新发明轮子.Google Guava库提供了这个Splitter类.
以下是如何使用它以及一些测试代码:
package com.sandbox;
import com.google.common.base.Splitter;
import org.junit.Test;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class SandboxTest {
@Test
public void testQuestionInput() {
Map<String, String> map = splitToMap("A=4 H=X PO=87");
assertEquals("4", map.get("A"));
assertEquals("X", map.get("H"));
assertEquals("87", map.get("PO"));
}
private Map<String, String> splitToMap(String in) {
return Splitter.on(" ").withKeyValueSeparator("=").split(in);
}
}
Run Code Online (Sandbox Code Playgroud)
Den*_*ret 21
您不需要库来执行此操作.您只需要使用StringTokenizer或String.split并迭代标记来填充地图.
库的导入及其设置几乎与自己完成的三行代码一样大.例如 :
public static Map<String, String> convert(String str) {
String[] tokens = str.split(" |=");
Map<String, String> map = new HashMap<>();
for (int i=0; i<tokens.length-1; ) map.put(tokens[i++], tokens[i++]);
return map;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在现实生活中,与您的业务需求高度耦合的令牌和字符串的验证可能比您在此处看到的代码更重要.
Mar*_*ace 17
Java 8来救援!
import static java.util.stream.Collectors.*;
Map<String, String> result = Arrays.stream(input.split(" "))
.map(s -> s.split("="))
.collect(Collectors.toMap(
a -> a[0], //key
a -> a[1] //value
));
Run Code Online (Sandbox Code Playgroud)
注意:假设没有重复.否则请查看第3个'mergeFunction'参数.
public static Map<String, String> splitToMap(String source, String entriesSeparator, String keyValueSeparator) {
Map<String, String> map = new HashMap<String, String>();
String[] entries = source.split(entriesSeparator);
for (String entry : entries) {
if (!TextUtils.isEmpty(entry) && entry.contains(keyValueSeparator)) {
String[] keyValue = entry.split(keyValueSeparator);
map.put(keyValue[0], keyValue[1]);
}
}
return map;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将它用于不同类型的条目/键值分隔符,就像这样
Map<String, String> responseMap = splitToMap(response, " ", "=");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77272 次 |
| 最近记录: |