【问题标题】:Split string into hashmap将字符串拆分为 hashmap
【发布时间】:2017-12-15 06:03:33
【问题描述】:

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

【问题讨论】:

  • String to HashMap JAVA的可能重复
  • 经典:你能告诉我们你的方法吗?你的代码到底有什么问题?或者换一种说法:字符串函数和循环有什么问题...?
  • 如果ABCD 1 的长度不变,他们就剪掉它。
  • 那你的代码有什么问题?

标签: java hashmap


【解决方案1】:

可能最安全的方法是为键/值对定义正则表达式模式,然后迭代您的字符串,应用该模式。在这种情况下,我们可以尝试使用以下模式:

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

上面的代码sn -p输出如下:

Found a key/value: (key1, value1)
Found a key/value: (key2, value2)
Found a key/value: (key3, value3)

Demo

【讨论】:

  • 我没有投反对票,但我猜有人投了反对票,因为您回答了一个似乎重复的问题。
  • @domsson 实际上,这里需要的模式是不同的,也许不是完全相同的副本,但理论上是的,OP 应该能够仅使用该链接来解决这个问题。
【解决方案2】:

您可以尝试编写如下代码

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

}

【讨论】:

  • 这不适用于 OP 的数据,因为它包含键和值以外的文本。不是我的反对票。
  • 此代码不适用于问题中的示例数据。
  • @m.vokhm 他要求我们从样本数据中删除 ABCD 1
  • @JoginderKumar 他没有要求手动删除它们。他表明可能存在key=value 以外的子字符串,这些子字符串应该被忽略,他通过接受另一个答案来确认这一点,代码的行为就像我说的那样。您的代码将在这样的输入上抛出 NullPointerException
猜你喜欢
  • 2015-10-31
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 2012-02-22
相关资源
最近更新 更多