从字符串构造对象

时间:2016-11-10 12:08:06

标签: java

是否可以构造一个给定字符串,toString()方法和Class本身的对象。

例如我们有Book Book。

class Book
{
   // ...

   String getTitle()
   {
      return title;
   }

   String getPubYear()
   {
      return pubYear;
   }

   void setTitle(String _title)
   {
      title = _title;
   }

   void setPubYear(String _pubYear)
   {
      pubYear = _pubYear;
   }

   public String toString(){
      return title+" "+pubYear;

   }
}

如果我们有字符串:

"ExampleTitle 2017"

我们如何创建类Book的实例,其中包含属性:

title=ExampleTitle

pubyear=2017

我们可以做到以下几点:

Book book = new Book();
String exampleString = "ExampleTitle 2017";
String[] parts = exampleString.split();
book.setTitle(parts[0]);
book.setPubYear(parts[1]);

但这是漫长的啰嗦。有更自动的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以添加新的构造函数:

public Book(String s) {
    String[] parts = s.split(" ");
    if (parts.length() == 1) {
        this.title = s;
    } else {
       this.title=parts[0];
       this.pubYear(Integer.parseInt(parts[1]));
    }
}

你应该自己添加NumberFormatException处理,但我推荐我的post

上面的构造函数将采用String,将其拆分为空格并执行您已完成的操作。您可以像使用它一样使用它:

Book book = new Book("Example_title 2001");

但这不是最好的方法。您应该使用标准模式,首先将要设置的值提取到Book,然后将它们传递给构造函数。

做你想做的事的好方法是创建另一个构造函数:

public class Book {

    public Book(String s, int y) {
        this.title = s;
        this.year = y;
    }
}

请将year字段更改为intlong。只要您不使用String,年份就不应该是Roman numbers