我上课了。我已经覆盖了toString值。现在我想将toString输出的值映射到类。有没有快捷方式?
public class Cat {
String name;
int age;
String color;
public Cat(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
@Override
public String toString() {
return "Cat{" + "name=" + name + ", age="+age+",color="+color+'}';
}
}`
简而言之,我想将以下值映射到Cat类
String value = "Cat{name=Kitty,age=1,color=Black}"
Cat cat = // create a 'Cat'from 'value'
提前谢谢你。
答案 0 :(得分:0)
您可以使用正则表达式执行此操作:
(?<name>\\w*)
正则表达式将3个值名称,年龄和颜色捕获到组(?<age>\\d+)
,(?<color>\\w*)
和\\s*
中,以便您可以抓取它们。你仍然需要将年龄解析成一个int。
它还说明逗号和值之间使用{{1}}(即0个或更多个空格)之间的不同数量的空格。
另见:
答案 1 :(得分:0)
最后,我希望的课程看起来像这个。特别感谢@Jorn vernee
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Cat {
String name;
int age;
String color;
public Cat(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
public Cat(String strValue){
Pattern catCapture = Pattern.compile(
"Cat\\{name=(?<name>\\w*)\\s*,\\s*age=(?<age>\\d+)\\s*,\\s*color=(?<color>\\w*)\\}"
);
Matcher matcher = catCapture.matcher(strValue);
if(matcher.find()) {
this.name = matcher.group("name");
this.age = Integer.parseInt(matcher.group("age"));
this.color = matcher.group("color");
} else {
throw new RuntimeException("Can not parse: " + strValue);
}
}
@Override
public String toString() {
return "Cat{" + "name=" + name + ", age=" + age + ", color=" + color + '}';
}
}
答案 2 :(得分:0)
根据您的要求考虑GSON。
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
// no-args constructor
}
}
// Serialization
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
并且,反序列化,这是您的用例:
// Deserialization
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
答案 3 :(得分:0)
这就是我要找的......谢谢sujit。
Cat cat = new Cat("Kitty",1,"Black");
Gson gson = new Gson();
String json = gson.toJson(cat);
System.out.println(json);
Cat cat2 = gson.fromJson(json, Cat.class);
System.out.println(cat2.toString());