如何将Java对象toString结果快速转换为创建对象的Java源码?
从toString输出快速生成Java对象创建代码的方法
针对你这种从toString输出反向生成测试用对象创建代码的需求,结合你定义的User record,有几个实用的快速方法:
1. IDE正则替换一键生成
这是最快的方式,以IntelliJ IDEA为例:
- 把你的toString输出
[User[firstName=John, lastName=Smith]]粘贴到代码编辑器里 - 打开替换功能(快捷键
Ctrl+R),勾选「正则表达式」选项 - 查找框输入:
\[User\[firstName=(.*?), lastName=(.*?)\]\] - 替换框输入:
Arrays.asList(new User("$1", "$2")); - 点击替换,直接得到想要的代码
如果是多个User的情况(比如[User[firstName=John, lastName=Smith], User[firstName=Jane, lastName=Doe]]),可以调整正则为User\[firstName=(.*?), lastName=(.*?)\],批量替换后再手动拼接进Arrays.asList()里。
2. 手写极简解析脚本
因为你的User是record,toString格式固定且字段顺序和构造器参数完全对应,写个简单的Java小工具就能自动生成代码:
public class ToStringToCodeGenerator { public static void main(String[] args) { String toStringOutput = "[User[firstName=John, lastName=Smith]]"; // 去除最外层方括号 String content = toStringOutput.substring(1, toStringOutput.length() - 1); // 拆分多个User实例(如果有的话) String[] userStrs = content.split(",\\s*User\\["); StringBuilder code = new StringBuilder("Arrays.asList("); for (String userStr : userStrs) { // 确保每个User字符串的格式正确 String cleanUserStr = userStr.startsWith("User[") ? userStr.substring(6, userStr.length() - 1) : userStr.substring(0, userStr.length() - 1); String[] fields = cleanUserStr.split(",\\s*"); // 提取字段值 String firstName = fields[0].split("=")[1]; String lastName = fields[1].split("=")[1]; code.append(String.format("new User(\"%s\", \"%s\"), ", firstName, lastName)); } // 移除最后多余的逗号和空格 if (code.length() > 12) { code.delete(code.length() - 2, code.length()); } code.append(");"); System.out.println(code); } }
运行这个类,输入对应的toString字符串,就能直接输出可用的创建代码。
3. 利用Record特性手动快速拼接
因为User是record,构造器参数和toString里的字段顺序完全一致,你可以直接:
- 从toString里提取
firstName和lastName的值 - 按
new User("值1", "值2")的格式拼接,多实例就用逗号分隔后套进Arrays.asList()里
这种方式适合偶尔处理单个实例的场景,不用写工具或用正则,几秒钟就能搞定。
内容的提问来源于stack exchange,提问作者R A
相关产品推荐
相关产品推荐

