Zählvariable für String

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgende String:

Code:
String stringEingabe = "person.1.vorname=Ratna/person.1.nachname=Lein/person.2.vorname=Robert/person.2.nachname=Schmidt/person.3.vorname=Peter/person.3.nachname=Meier ..."

Ich würde gerne den String aufsplitten in eine Liste von meiner Klasse Person:

Code:
public classe Person {
      public String vorname;
      public String nachname;
}

Dazu:
Code:
StringTokenizer st = new StringTokenizer(stringEingabe, "/");
while (st.hasMoreTokens()) {
       Person person = new Person();
       String kV = st.nextToken();
       String[] parts = StringUtils.split(kV, "=");
       String key = parts[0];
       String value = parts[1];
       if (StringUtils.startsWith(key, "person.1.vorname")) {
             person.setVorname(value);
       }
       if (StringUtils.startsWith(key, "person.1.nachname")) {
             person.setNachname(value);
       }
}

Da die Anzahl der Personen unbekannt ist, muss ich eine Zählvariable in meinen Code reinbringen, ich habe aber momentan keine Idee wie ich das mache.
Code:
StringUtils.startsWith(key, "person.1.vorname")
Darin muss ich irgendwie die Intelligenz bauen, dass alle Personen durchlaufen werden.

Hat jemand vielleicht eine Idee?

Vielen Dank.

Viele Grüße aus Rheinland,

Eure Ratna
 
Hi,

der erste Ansatz mit dem Splitten an Hand der "/" ist schon mal ok, so würde ich das auch machen. In deiner Schleife erstellst du aber nach jedem Token eine neue Person, was meiner Meinung nach aber nicht zu der Angabe passt. Die einzelnen Felder werden so getrennt, nicht die Personen.

Einen Zähler brauchst du eigentlich nicht, du hängst die neu erstellten Personen einfach an eine (Array)List ran.
Hier mit einem startsWith() zu arbeiten und die Zähler mitlaufen zu lassen finde ich ziemlich umständlich.

Ich würde wie du erstmal den String am "/" trennen:
Java:
// Variablen definieren
Person aktPerson = null;
String aktPersLnr = null;
List<Person> allePersonen = new ArrayList<>();

// Der zu teilende String
String str = "person.1.vorname=Ratna/person.1.nachname=Lein/person.2.vorname=Robert/person.2.nachname=Schmidt/...";

String[] attribute = str.split("/");
for(String token : attribute) {
  // token = "person.1.vorname=Ratna"
  // ...
}

In der Schleife werden nun alle Attribut-Wert-Paare durchlaufen, beim ersten Durchlauf z.B. "person.1.vorname=Ratna".
Als nächstes würde ich den String an Hand des "=" trennen.
Java:
String[] pair = token.split("=");
String feld = pair[0]; // "person.1.vorname"
String wert = pair[1]; // "Ratna"
// ...

Nun musst du das Feld noch weiter aufteilen an den Punkten. Den zweiten Wert speichert du dir, damit du merkst, wann du eine neue Person erstellen musst.
Java:
String[] feldTeile = feld.split("\\.");   // Die split() erwartet einen Regex, von daher den Punkt escapen!
String aktTyp = feld[0]; // "person"
String aktLnr = feld[1]; // "1"
String aktAttribut = feld[2]; // "vorname"
// ...

Jetzt hast du den String soweit atomar zerlegt, dass du direkt mit den Feldern arbeiten kannst. Zuerst würde ich überprüfen, ob du eine neue Person brauchst, indem du die aktuelle Laufnummer mit der aktuellen Person vergleichst. Wenn die unterschiedlich sind, erstellst du eine neue.
Java:
if(!Objects.equals(aktPersLnr, aktLnr)) {
  // Person speichern in Liste
  if(aktPerson != null) {
    allePersonen.add(aktPerson);
  }

  // Neue laufnummer, also neue Person erstellen
  aktPerson = new Person();
}

// das Feld in der Person setzen, Hilfsmethode
//                   "vorname", "Ratna"
setzeFeld(aktPerson, aktAttribut, wert);

Grüße,
BK
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück