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

Kotlin中如何将toString生成的People列表字符串转回List<People>

把自定义toString()生成的字符串转回List

这确实是个常见的小困扰——毕竟toString()的输出本来就不是为了序列化/反序列化设计的,不过咱们可以手动解析这个格式固定的字符串,一步步把它转成List<People>。

首先假设你的People数据类是这样的:

data class People(val name: String, val age: Int)

接下来直接上可行的解析代码,我会一步步解释每个环节:

val peopleString = "[People(name=john, age=23), People(name=mary, age=21), People(name=george, age=11)]"

val peopleList: List<People> = peopleString
    // 第一步:去掉字符串首尾的方括号,得到中间的条目集合字符串
    .removeSurrounding("[", "]")
    // 第二步:把每个People条目拆分出来,拆分符是"), People(",刚好匹配条目之间的分隔格式
    .split("), People(")
    // 第三步:遍历每个条目,解析成People对象
    .map { rawEntry ->
        // 清理每个条目的前后缀:第一个条目开头是"People(",最后一个条目结尾是")",统一处理掉
        val cleanedEntry = rawEntry.removePrefix("People(").removeSuffix(")")
        // 拆分name和age的键值对,按", "分割(注意这里的空格要和原字符串格式一致)
        val (nameSegment, ageSegment) = cleanedEntry.split(", ")
        // 提取name的值:去掉"name="前缀
        val name = nameSegment.removePrefix("name=")
        // 提取age的值并转成Int:去掉"age="前缀后转整数
        val age = ageSegment.removePrefix("age=").toInt()
        // 生成People对象
        People(name, age)
    }

一些注意事项:

  • 这个方案完全依赖你给出的toString()输出格式,如果格式有变化(比如name=后面加了引号、逗号和age之间没有空格),需要对应调整拆分和清理的规则。
  • 如果你的People类有更多字段,只需要在map环节里添加对应的字段解析逻辑就行。
  • 要是担心格式不稳定,下次建议用标准的序列化方式(比如Gson、Jackson)来保存列表,而不是用toString(),这样反序列化会更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:04:39