You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含首尾大括号的键值对字符串转换为Java HashMap

带首尾大括号的键值对字符串转Java HashMap实现

原有逻辑失效的核心原因是未提前剥离字符串首尾固定包裹的{、}字符,直接把整串纳入键值对切分流程,最终导致首键带{前缀、尾值带}后缀,拆分得到的键值和预期结构完全不匹配。只要在原逻辑前增加一步大括号剔除的预处理,剩余的字符串结构和之前可正常运行的无大括号输入完全一致,无需重构整套切分逻辑。

实现步骤

  • 预处理字符串:先去除首尾可能存在的空白,再截取剔除首尾大括号的核心内容,规避无效字符对切分逻辑的干扰
  • 切分键值对片段:将预处理后的字符串按分隔规则拆分为单个键值对条目
  • 拆分键值:对每个条目按=分隔符拆分为独立的键和值,同步去除键值两侧的多余空白
  • 收集结果:通过Stream收集器将拆分后的键值对组装为HashMap实例

参考代码

import java.util.Arrays;
import java.util.HashMap;
import java.util.stream.Collectors;

public class MapConvertDemo {
    public static void main(String[] args) {
        String datasample = "{SessionID=ACVRT5678897DERT, Name=ACFGTYR, Age=34, sessionTime=20210428}";

        // 提前计算去空白后的字符串,避免重复调用trim()
        String trimmedInput = datasample.trim();
        HashMap<String, String> resultMap = Arrays.stream(
                // 截取从第一个字符到倒数第二个字符的内容,直接剔除首尾的{和}
                trimmedInput.substring(1, trimmedInput.length() - 1)
                        // 用正则按逗号+任意数量的空白切分,兼容逗号后无空格、多空格、制表符的场景
                        .split(",\\s*")
        )
                // 过滤不包含=的非法条目,避免后续拆分时数组越界
                .filter(pairStr -> pairStr.contains("="))
                .map(pairStr -> pairStr.split("="))
                .collect(Collectors.toMap(
                        kv -> kv[0].trim(),
                        kv -> kv[1].trim(),
                        // 遇到重复键时保留首次出现的值,避免抛出重复键异常
                        (oldVal, newVal) -> oldVal,
                        HashMap::new
                ));

        // 验证输出结果
        System.out.println(resultMap);
    }
}

兼容优化说明

  • 替换硬编码的, 分隔规则为正则,\\s*,可适应不同格式的空白分隔场景,降低对输入格式的强依赖
  • 增加非法条目过滤逻辑,跳过结构异常的内容片段,避免运行时出现索引越界错误
  • 重复键的处理策略可根据实际业务调整,比如设置为覆盖旧值、拼接多值等

内容的提问来源于stack exchange,提问作者user15345826

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 05:27:03