如何从字符串格式的实体对象中提取指定数据并生成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
相关产品推荐
相关产品推荐

