2016-11-10 124 views
-1

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

例如,我们有班书。

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" 

我们如何创建类图书的一个实例,有具有属性:

title=ExampleTitle 

pubyear=2017 

我们可以做到以下几点:

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

但这是lon g啰嗦。有没有更自动的方法来做到这一点?

+4

你为什么觉得这很长时间?我不知道你希望一个“自动”解决方案如何理解你的字符串的哪部分映射到什么 – tddmonkey

+0

toString()并不意味着提供可解析的东西,并允许重新创建对象。如果您需要,请使用XML或JSON编组器/解组器。不toString()。 –

+0

添加一个新的构造函数:'public Book(String title,String year){...}'。如果'String'适合'year',我不确定。 – pzaenger

回答

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; 
    } 
} 

请更改yearintlong。年份不应该是String,只要您不使用Roman numbers即可。

相关问题