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

如何从字符串格式的实体对象中提取指定数据并生成ArrayList集合

解决方案

核心思路是先把符合类名{键=值, 键=值...}格式的字符串解析为键值对映射,再按需提取字段值组装为List,适配不同类的toString输出场景。

具体实现(Java示例)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ObjectStringParser {
    // 通用解析方法,返回字段->值的映射
    public static Map<String, String> parse(String input) {
        Map<String, String> resultMap = new HashMap<>();
        if (input == null || input.trim().isEmpty()) {
            return resultMap;
        }
        // 清理收尾无用字符
        String content = input.trim();
        if (content.endsWith(";")) {
            content = content.substring(0, content.length() - 1);
        }
        // 截取大括号中间的内容
        int start = content.indexOf("{");
        int end = content.lastIndexOf("}");
        if (start == -1 || end == -1 || start >= end) {
            return resultMap;
        }
        String kvContent = content.substring(start + 1, end).trim();
        // 分割为单个键值对
        String[] kvPairs = kvContent.split(",");
        for (String pair : kvPairs) {
            pair = pair.trim();
            if (pair.isEmpty()) continue;
            // 拆分键和值
            int eqIndex = pair.indexOf("=");
            if (eqIndex == -1) continue;
            String key = pair.substring(0, eqIndex).trim();
            String value = pair.substring(eqIndex + 1).trim();
            // 去掉值首尾的单引号、双引号
            if ((value.startsWith("'") && value.endsWith("'")) || (value.startsWith("\"") && value.endsWith("\""))) {
                value = value.substring(1, value.length() - 1);
            }
            resultMap.put(key, value);
        }
        return resultMap;
    }

    public static void main(String[] args) {
        // 测试Student示例
        String studentStr = "Student{id=19, groupId=1, firstName='Alex', lastName='Sparrow'}";
        Map<String, String> studentMap = parse(studentStr);
        List<String> studentResult = new ArrayList<>();
        // 按需提取字段
        studentResult.add(studentMap.get("groupId"));
        studentResult.add(studentMap.get("firstName"));
        studentResult.add(studentMap.get("lastName"));
        System.out.println(studentResult); // 输出 [1, Alex, Sparrow]

        // 测试Group示例
        String groupStr = "Group{id=22, groupName=\"BKS\",groupCity=\"Moscow\"};";
        Map<String, String> groupMap = parse(groupStr);
        List<String> groupResult = new ArrayList<>();
        groupResult.add(groupMap.get("groupName"));
        // 如果需要输出字段名直接插入即可,比如你示例需要的groupCity字段名
        groupResult.add("groupCity");
        groupResult.add(groupMap.get("groupCity"));
        System.out.println(groupResult); // 输出 [BKS, groupCity, Moscow]
    }
}

说明

  • 该实现默认适配标准的Java类toString输出格式,支持值带单引号、双引号,末尾带分号的场景
  • 如果需要提取不同字段,只需要修改get的键名即可,不需要改动解析逻辑
  • 如果有特殊格式(比如值里包含逗号/等号),可以调整分割逻辑为正则匹配,适配更复杂的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:27:02