Java类toString()并从字符串返回?
我使用自定义toString()函数创建了一些类:Java类toString()并从字符串返回?,java,Java,我使用自定义toString()函数创建了一些类: public class Test { public String eventName; public Long eventTime; //timestamp public Integer firstEventResult; public Integer secondEventResult; // ... and dozens more variables @Override publi
public class Test {
public String eventName;
public Long eventTime; //timestamp
public Integer firstEventResult;
public Integer secondEventResult;
// ... and dozens more variables
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("Event(");
stringBuilder.append("name:");
stringBuilder.append(this.eventName);
stringBuilder.append(", ");
stringBuilder.append("time:");
stringBuilder.append(this.eventTime);
if(firstEventResult != null) {
stringBuilder.append(", ");
stringBuilder.append("firstEventResult:");
stringBuilder.append(this.firstEventResult);
}
if(secondEventResult != null) {
stringBuilder.append(", ");
stringBuilder.append("secondEventResult:");
stringBuilder.append(this.secondEventResult);
}
// ...
stringBuilder.append(")");
return stringBuilder.toString();
}
}
这个toString()函数为我提供如下字符串:
事件(名称:Test,时间:123456789,firstEventResult:200)
在这种情况下,如何将上面的字符串再次转换回类?如果您确实坚持使用标准序列化程序(如GSON)而不是使用
.toString()
进行自定义序列化,那么您需要编写自己的序列化程序/解析器来反序列化对象,为此您有两个选项:
选项1:
在一般情况下,您需要使用使用its和其他相关方法从字符串中获取对象
以下是要遵循的主要步骤:
Regex
或String
操作提取对象成员,例如,如果您知道格式与此完全相同:
Event(name:Test, time:123456789, firstEventResult:200)
- 以
事件(
- 用
,
- 以
结尾)
映射
publicstaticyourclassname fromString(stringstr){
YourClassName结果=新建YourClassName();
//移除起点和终点(未测试:P)
字符串修剪=str.substring(6,str.length-7);
String[]valuePairs=trimmed.split(“,”);
映射值=新的HashMap();
//将值对转换为映射
for(字符串值对:值对){
String[]pair=valuePair.split(“:”);
字符串键=对[0];
字符串值=对[1];
value.put(键、值);
}
//逐个设置值
if(values.get(“name”)!=null)result.name=values.get(“name”);
if(values.get(“firstEventResult”)!=null)result.firstEventResult=Integer.parse(values.get(“firstEventResult”);
//和所有其他人。。。
返回结果;
}
尝试使用标准方式序列化-反序列化这些对象。。。类似于json的“使用toString()方法对我来说很重要”使您的问题看起来像。你能解释一下你到底想做什么,阻止你使用标准的序列化和反序列化吗?人们都投反对票,因为你还没有亲自尝试解决这个问题。人们投了反对票,因为这个问题以前被问过很多次,找到重复的问题就像把你的标题插入搜索栏一样简单。人们投反对票是因为,正如他们所说,这不是一个需要解决的有用问题toString
不是可逆的序列化协议。这与宽恕无关。阅读帮助中心以更好地理解如何使用堆栈溢出(以及了解下行投票的含义)。“因为我有许多类是以这种方式序列化的”并不能解释太多。仅仅因为你在其他地方犯了错误并不意味着你需要到处重复。相反,慢慢来,改正你以前的错误。大多数任务已经有适当的工具使我们的生活更轻松。如果您想存储对象,您需要序列化(标准的序列化,或者如果您需要人类可读的格式,您可以使用JSON);事实上,这可能是对该类的误用。OIS实际上是用来读取通过标准Java序列化机制序列化的对象(来自文档:“ObjectInputStream反序列化以前使用ObjectOutputStream编写的基本数据和对象,”emphasis补充道)。如果您只想解析文本并创建一个对象,您可以使用普通解析来完成。见鬼,在这种情况下,你可以使用正则表达式。提取片段,然后使用它们实例化事件。