Java 反向ToStringBuilder:将字符串转换为具有嵌套对象的对象

Java 反向ToStringBuilder:将字符串转换为具有嵌套对象的对象,java,apache,Java,Apache,有没有办法将我的输出从转换回stringbuilder到java对象 由于某种原因,我需要将一些字符串转换为对象,这些字符串是通过到stringbuilder从java对象转换而来的 像这样: [homeRequest=HomeRequest[homeDate=Tue Mar 10 07:58:17 CST 2015,homeInfo=[HomeInfo[ipId=<null>,name=Test]]]] [homeRequest=homeRequest[homeDate=2015

有没有办法将我的输出从
转换回stringbuilder
到java对象

由于某种原因,我需要将一些
字符串
转换为
对象
,这些字符串是通过
到stringbuilder
从java对象转换而来的

像这样:

[homeRequest=HomeRequest[homeDate=Tue Mar 10 07:58:17 CST 2015,homeInfo=[HomeInfo[ipId=<null>,name=Test]]]]
[homeRequest=homeRequest[homeDate=2015年3月10日星期二07:58:17 CST,homeInfo=[homeInfo[ipId=,name=Test]]

HomeRequest
是一个对象,
HomeInfo
是一个对象。

您可以使用正则表达式拆分值

String line = "[homeRequest=HomeRequest[homeDate=Tue Mar 10 07:58:17 CST 2015,homeInfo=[HomeInfo[ipId=<null>,name=Test]]]]";

Pattern pat = Pattern.compile("^.*HomeRequest\\[homeDate=([^,]*),.*HomeInfo\\[ipId=([^,]*),name=([^\\]]*).*");
Matcher m = pat.matcher(line);
if (m.find()) {
    String homeDate = m.group(1);
    String ipId = m.group(2);
    String name = m.group(3);
    ...
    // create new instances of the objects
}
String line=“[homeRequest=homeRequest[homeDate=2015年3月10日星期二07:58:17 CST,homeInfo=[homeInfo[ipId=,name=Test]]”;
Pattern pat=Pattern.compile(“^.*HomeRequest\\[homeDate=([^,]*),.*HomeInfo\[ipId=([^,]*),name=([^\\]*));
匹配器m=匹配器(线);
if(m.find()){
字符串homeDate=m.group(1);
字符串ipId=m.group(2);
字符串名称=m.group(3);
...
//创建对象的新实例
}

正则表达式的解释:

^.*HomeRequest\\[homeDate=
-匹配从行首到
homeDate=

([^,]*)
-匹配在第一个
之前停止的未指定数量的字符,此组稍后可由组索引1访问

,*HomeInfo\\[ipId=
-从
到任何字符的文本匹配

([^,]*)
-匹配在第一个
之前停止的未指定数量的字符,此组稍后可由组索引2访问

,name=
-匹配文本子字符串

([^\\]]*)
-匹配在第一个
]
之前停止的未指定数量的字符,以后可以通过组索引3访问此组

*
-匹配以下所有字符


有关正则表达式的进一步解释,请查看此处。您将在此处找到上述示例的完整解释。

是的,有一种方法。解析字符串并创建
HomeRequest
和“HomeInfo”的新实例。到目前为止您做了什么?您需要创建自定义字符串解析器以提取所需信息。例如,删除第一个和最后一个括号,然后删除“homeRequest=”。在第一个索引“[”和最后一个索引“]”之间插入子字符串(这将是您的homeRequest对象)。然后使用各种子字符串来提取其余信息。问题是字符串表示法是否包含原始对象中的所有状态信息。您需要添加类的定义和对
ToStringBuilder
的特定调用,该调用用于回答您的问题。@SubOptimal I c解析一个简单的对象字符串,比如HomeInfo[ipId=,name=Test]],但我不知道如何使它更为常见。一般来说,没有-没有办法将某些对象的ToStringBuilder输出转换为这些对象的精确克隆:例如,ToStringBuilder不会以允许还原它们的方式呈现循环引用。但是,在某些情况下,原始转换为字符串不会丢失任何信息,并且可以恢复原始对象。向我们展示来源,看看您的案例是一般案例还是幸运案例。