【问题标题】:How to split the following string using Java?如何使用Java拆分以下字符串?
【发布时间】:2013-10-12 03:07:09
【问题描述】:

如何使用 Java 拆分以下字符串?

{525={174=2, 133=1, 182=1}}

可以有多个类似于上面的行。它们中的每一个都是外部 HashMap 的组合。 假设还有一行

{500={100=2, 150=1, 200=1}}

所需的结构是

525 -> 174 -> 2
       133 -> 1
       182 -> 1
500 -> 100 -> 2
       150 -> 1
       200 -> 1

我想在 Hashmap 中包含数字>。

这是我尝试过的:

String s="{525={174=2, 133=1, 182=1}}";
HashMap<Integer, HashMap<Integer, Integer>> fullMap = new HashMap<Integer, HashMap<Integer, Integer>>();
Integer key, innerKey, innerValue;
key = Integer.parseInt(s.split("=")[0].replace("{",""));

我是 Java 新手,不知道如何继续。

【问题讨论】:

  • 您能否在 HashMap 中为输入“{525={174=2, 133=1, 182=1}}”显示您期望的键和值?
  • 525 将是 fullMap 的键,174、133、182 将是内部映射的键,而 2,1,1 将分别是它们的值。可以有更多类似上面的字符串。这些将是 fullMap 的其他键和值。
  • 请提供输入字符串的语法,并说明您希望如何拆分它。单个示例不是正确的需求规范。
  • 这是否总是用于列表中的列表(即深度不超过两个列表)?或者它可以更深吗?如果是这样,您将不得不仔细计算{}(基本上是编写一个下推自动机)。
  • 这有点像 JSON 格式,而且你有嵌套。它无法在“平面”地图中合理地表示。

标签: java string split hashmap


【解决方案1】:

试试这个

    String[] a = s.replaceAll("[{}]", "").split("=", 2);
    int key = Integer.parseInt(a[0].trim());
    HashMap<Integer, Integer> innerMap = new HashMap<>();
    for (String e : a[1].split(",")) {
        a = e.split("=");
        innerMap.put(Integer.parseInt(a[0].trim()),  Integer.parseInt(a[1].trim()));
    }
    fullMap.put(key, innerMap);

【讨论】:

  • 完美运行!谢谢。
猜你喜欢
  • 2022-01-15
  • 2018-07-13
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多