String str="ABCD 1 key1=value1 key2=value2 key3=value3";
我想将上面的字符串转换为键值对
Map<String, String> map = new HashMap<String, String>();
如果我想访问 key1 ,那么它应该返回 value1 例如:map.get(“key1”)应返回value1。
请帮我一个有效的方法将其转换为hashmap
。
答案 0 :(得分:3)
可能最安全的方法是为键/值对定义正则表达式模式,然后迭代字符串,应用该模式。在这种情况下,我们可以尝试使用以下模式:
\b([^\s]+)=([^\s]+)\b
密钥和值将分别作为第一个和第二个捕获组使用。需要一些轻微的功能,因为并非所有字符串都是键值(即主要内容不属于最终地图)。
Map<String, String> map = new HashMap<>();
String str="ABCD 1 key1=value1 key2=value2 key3=value3";
String pattern = "\\b([^\\s]+)=([^\\s]+)\\b";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
while (m.find()) {
System.out.println("Found a key/value: (" + m.group(1) + ", " + m.group(2) + ")");
map.put(m.group(1), m.group(2));
}
以上代码段输出以下内容:
Found a key/value: (key1, value1)
Found a key/value: (key2, value2)
Found a key/value: (key3, value3)
答案 1 :(得分:-1)
您可以尝试编写如下代码
public static void main(String[] args) {
String str = "key1=value1 key2=value2 key3=value3";
Map<String, String> map = new HashMap<String, String>();
String[] strArray = str.split(" ");
for (int i = 0; i < strArray.length; i++) {
String data = strArray[i];
String[] keyValue = data.split("=");
map.put(keyValue[0], keyValue[1]);
}
System.out.println(map.get("key1"));
}