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

如何在值含逗号时将String转为Map<String, String>?

用正则Split处理带引号的键值对字符串完全可行

直接给结论:可以用带正向预查的正则表达式作为split的分隔符,精准拆分不在双引号内的逗号,完美解决值里含逗号导致拆分错误的问题,而且不需要依赖任何第三方库,完全适配安卓平台。

核心正则表达式

用这个正则匹配分隔符:

,(?=(?:[^"]*"[^"]*")*[^"]*$)

它的作用是:只匹配那些后面跟着偶数个双引号的逗号——换句话说,就是不在双引号包裹范围内的逗号,完全避开值里的逗号。

安卓Java代码实现示例

import java.util.HashMap;
import java.util.Map;

public class StringToMapUtil {
    public static Map<String, Object> convertToMap(String inputStr) {
        Map<String, Object> resultMap = new HashMap<>();
        // 先清理输入首尾的多余空格和可能的外层引号
        String cleanedInput = inputStr.trim().replaceAll("^\"|\"$", "");
        
        // 用正则拆分每个键值对条目
        String[] keyValueEntries = cleanedInput.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
        
        for (String entry : keyValueEntries) {
            // 按冒号拆分键和值,只拆一次(防止值里出现冒号)
            String[] keyValuePair = entry.split(":", 2);
            if (keyValuePair.length != 2) {
                continue; // 跳过格式错误的条目
            }
            
            // 清理键的引号和空格
            String key = keyValuePair[0].trim().replaceAll("^\"|\"$", "");
            // 清理值的引号和空格
            String rawValue = keyValuePair[1].trim().replaceAll("^\"|\"$", "");
            
            // 可选:把数字类型的值转成对应类型(按需调整)
            Object value;
            try {
                value = Integer.parseInt(rawValue);
            } catch (NumberFormatException e1) {
                try {
                    value = Double.parseDouble(rawValue);
                } catch (NumberFormatException e2) {
                    value = rawValue; // 非数字就存字符串
                }
            }
            resultMap.put(key, value);
        }
        return resultMap;
    }
}

注意事项

  1. 这个方案假设输入的字符串格式是规范的:所有键值对都用双引号包裹,没有嵌套的双引号,也没有转义引号(比如\")。如果你的场景存在转义引号,需要先处理转义字符再用这个正则。
  2. split(":", 2) 里的2很重要,确保只拆分键和值的第一个冒号,避免值里有冒号导致拆分错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:55:17