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

标签 java parsing hashmap

我有一个以特定格式出现的字符串,所以我想将该字符串解析为映射。我有一个将 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"

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

此外,如果我的字符串有效负载不是以下格式,那么我想返回空映射。我的字符串格式将始终是这样的,如果不是这种格式,那么我将返回空映射。现在我不确定如何添加此逻辑,以便在出现这种情况时返回空 map ?

"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 的默认行为是覆盖,因此您可能已经涵盖了这种情况。只需在键/值对出现时写入它们,您就会自动用新值覆盖旧值。

关于java - 如何将特定格式的字符串解析为HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46356880/

相关文章:

java - 在带有 Java/JDBC 的 Oracle PL/SQL 中使用游标并获取结果

Java:两个整数的总和被打印为两个的串联

python - 通过正则表达式 python 解析大文件的最佳方法

scala - 相互递归 scala 解析器中的堆栈溢出

java - 如何按空格分割字符串(有异常(exception))

performance - 获取哈希表中键列表的时间复杂度?

java - 如何为 Spring Security 创建类型安全的用户角色?

java - 检查 Java 字节码是否包含调试符号

java - Hashmap结果只显示一行

java - Java中是否有可以容纳4个或更多值的数据结构