如何将特定格式的字符串解析为HashMap?

时间:2017-09-22 04:28:29

标签: java parsing hashmap

我有一个特殊格式的字符串,所以我想将该字符串解析为map。我有一个下面的方法,它将String解析为Map,它工作正常。

  public static Map<String, String> parseStringToMap(String payload) {
    Map<String, String> map = new HashMap<>();
    try {
      for (String part : payload.split("\\|")) {
        String[] subparts = part.split("=", 2);
        map.put(subparts[0], subparts[1]);
      }
    } catch (Exception ex) {
    }
    return map;
  }

字符串示例:

"type=3|Id=23456|user=13456"
"type=3|Id=23456|user=13456|type=3"

同一个密钥可能在同一个字符串有效负载中多次出现,因此我需要在可变映射中覆盖该密钥的值。

此外,如果我的字符串有效负载不是以下格式,那么我想返回空地图。我的字符串格式将始终如下,如果它不是这种格式,那么我将返回空地图。现在我不知道如何添加这个逻辑,以便在出现这种情况时我可以返回空地图?

"a=b|c=d|e=f"   

我正在使用Java 7.执行此操作的最佳和有效方法是什么?

我的规格只是这个。我的字符串将始终采用以下格式:

"a=b|c=d|e=f"

永远不会以任何特殊角色开始。

1 个答案:

答案 0 :(得分:2)

使用正则表达式确保传入的有效内容字符串具有正确的格式:

public static Map<String, String> parseStringToMap(String payload) {
    Map<String, String> map = new HashMap<>();
    if (!payload.matches("[A-Za-z0-9]+=[A-Za-z0-9]+(\\|[A-Za-z0-9]+=[A-Za-z0-9]+)*")) {
        // return empty map
        return map;
    }

    // your original code here
}

关于您对同一个键出现多次的担忧,hashmap的默认行为是覆盖,因此您可能已经涵盖了这种情况。只需在出现键值/值对时编写它们,您将自动用新值修改旧值。