2016-11-10 7 views
-1

Ist es möglich, ein Objekt mit einer Zeichenfolge, toString() -Methode und der Klasse selbst zu erstellen.Konstruieren eines Objekts aus einer Zeichenfolge

Zum Beispiel haben wir Klasse Buch.

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; 

    } 
} 

Wenn wir den String haben:

"ExampleTitle 2017" 

Wie können wir eine Instanz der Klasse Buch zu erstellen, mit denen hat Attribut:

title=ExampleTitle 

pubyear=2017 

Wir folgendes tun:

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

Aber das ist lon g gewunden. Gibt es einen automatischen Weg dies zu tun?

+4

Warum denken Sie, es ist langatmig? Ich weiß nicht, wie Sie eine "automatische" Lösung erwarten würden, um zu verstehen, welcher Teil Ihres Strings dem entspricht, was – tddmonkey

+0

ToString() nicht als etwas parseable dienen soll und das Objekt neu erstellen kann. Wenn Sie das wollen, dann verwenden Sie einen XML- oder JSON-Marshaller/Unmarshaller. Nicht toString(). –

+0

Fügen Sie einen neuen Konstruktor hinzu: 'public Book (String title, String year) {...}'. Ich bin mir nicht sicher, ob "String" für "Jahr" geeignet ist. – pzaenger

Antwort

2

Sie können einen neuen Konstruktor hinzu:

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

Sie Number auf Ihrem eigenen Umgang hinzufügen sollte, aber ich empfehle es meinen post über.

Der obige Konstruktor wird eine String nehmen, teilen Sie es durch ein Leerzeichen und führen Sie aus, was Sie getan haben. Sie können es wie verwenden:

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

aber es ist nicht der beste Ansatz. Sie sollten stattdessen Standardmuster verwenden und zuerst die Werte extrahieren, die Sie auf Book setzen möchten, und sie dann an den Konstruktor übergeben.

Die gute Art und Weise zu tun, was Sie wollen andere Konstruktor machen wird sein:

public class Book { 

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

Bitte year Feld long zu int oder ändern. Das Jahr sollte nicht String sein, solange Sie nicht Roman numbers verwenden.

Verwandte Themen