diff --git a/src/main/java/de/jfachwert/post/Adresse.java b/src/main/java/de/jfachwert/post/Adresse.java
index d31b36c7..fbcf1238 100644
--- a/src/main/java/de/jfachwert/post/Adresse.java
+++ b/src/main/java/de/jfachwert/post/Adresse.java
@@ -44,6 +44,26 @@ public class Adresse implements Fachwert {
private final String strasse;
private final String hausnummer;
+ /**
+ * Zerlegt die uebergebene Adresse in ihre Einzelteile und baut daraus die
+ * Adresse zusammen. Folgende Heuristiken werden fuer die Zerlegung
+ * herangezogen:
+ *
+ * - Reihenfolge kann Ort, Strasse oder Strasse, Ort sein
+ * - Ort / Strasse werden durch Komma oder Zeilenvorschub getrennt
+ * - vor dem Ort steht die PLZ
+ *
+ *
+ * @param adresse z.B. "12345 Entenhausen, Gansstr. 23"
+ */
+ public Adresse(String adresse) {
+ this(split(adresse));
+ }
+
+ private Adresse(String[] adresse) {
+ this(new Ort(adresse[0]), adresse[1], adresse[2]);
+ }
+
/**
* Erzeugt eine neue Adresse.
*
@@ -128,6 +148,7 @@ private static List toStrasseHausnummer(String line) {
String[] splitted = line.trim().split("\\s+");
if (splitted.length != 2) {
splitted = line.split("\\s+[0-9]", 2);
+ splitted[1] = line.substring(splitted[0].length()).trim();
}
if (splitted.length != 2) {
throw new InvalidValueException(line, "street_or_house_number");
diff --git a/src/test/java/de/jfachwert/post/AdresseTest.java b/src/test/java/de/jfachwert/post/AdresseTest.java
index 3c613cf8..6958d05b 100644
--- a/src/test/java/de/jfachwert/post/AdresseTest.java
+++ b/src/test/java/de/jfachwert/post/AdresseTest.java
@@ -75,5 +75,17 @@ public void testValidateStrasseOrt() {
String adresse = "Nordh\u00e4user Stra\u00dfe 63\n99089 Erfurt";
Adresse.validate(adresse);
}
+
+ /**
+ * Hier testen wir, ob der Konstruktor die uebergebene Adresse richtig
+ * zerlegt.
+ */
+ @Test
+ public void testAdresse() {
+ String musterdorf = "Alter Weg 110 a\n12345 Musterdorf";
+ Adresse adresse = new Adresse(musterdorf);
+ assertEquals("Alter Weg", adresse.getStrasse());
+ assertEquals("110 a", adresse.getHausnummer());
+ }
}