如何将toString值映射到类?

时间:2018-04-10 10:15:51

标签: java class mapping tostring

我上课了。我已经覆盖了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'

提前谢谢你。

4 个答案:

答案 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

来自user guide

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());