繁体   English   中英

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

[英]How to parse a string which is in particular format into 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"

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

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

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的默认行为是覆盖,因此您可能已经涵盖了这种情况。 只需编写出现的键/值对,您将自动覆盖旧值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM