Google Guava – Strings auftrennen und zusammensetzen

Komma-getrennte Strings auftrennen: Kein Problem, oder? Einfach .split(",") und fertig. Ach so, vielleicht noch die führenden Leerzeichen abschneiden. Und dann noch in eine Collection packen, da niemand mit Arrays arbeiten will. Moment, der String wird vom Benutzer eingegeben? Dann müssen wir mit Fehleingaben rechnen. Also leere Strings ignorieren, alle Leerzeichen abschneiden, vielleicht noch Semikolon und Punkt als Trennzeichen erlauben. Moment split verwendet reguläre Ausdrücke, also den Punkt escapen. Verdammt, wo kommen in den Tests die null-Werte im Array her? Und wieso ist so eine triviale Methode 10 Zeilen lang?

Wie man Strings auch einfacher auftrennen und zusammensetzen kann schauen wir uns in diesem Teil zu Google Guava an.

Strings auftrennen…

Javas split-Methode hat zwar durchaus ihre Berechtigung, wie man sieht reicht sie in der Praxis häufig aber nicht aus und muss erst in eine Menge Hilfscode verpackt werden um das gewünschte Ergebnis zu liefern. Mit dem Splitter aus den Google Guava Libraries geht das wesentlich einfacher. Der einfachste Aufruf sieht so aus:

 Damit entspricht die Funktionalität ziemlich genau Javas split-Methode:

Der Inhalt des Ergebnisses ist hier in beiden Fällen gleich. Auch die Lesbarkeit des Codes schenkt sich nicht viel. Ist der zu verarbeitende String aber nicht so sauber aufgebaut, etwa weil er vom Benutzer kommt, wird es im zweiten Beispiel schnell kompliziert. Wollen wir die Anforderungen vom Artikelanfang umsetzen, sieht eine mögliche Implementierung beispielsweise so aus:

 Beim Splitter muss der Aufruf nur um zwei Methoden ergänzt werden um das gleiche Ergebnis zu liefern:

 Neben dem einfachen Umgang mit null-Werten und Leerzeichen kann der Splitter aber noch mehr:

  • Null-Werte mit Defaults ersetzen
  • Füllzeichen ersetzen
  • Direkt Key-Value-Maps erzeugen
  • Nach x Elementen aufhören

…und wieder zusammensetzen

Um durch Zeichen getrennte Strings zu erstellen, fehlen Java einfache Methoden komplett. Daher muss man den klassischen Weg einer Schleife plus String-Verknüpfung gehen. Eine einfache, unoptimierte Lösung könnte so aussehen:

 Guava bietet mit dem Joiner als Gegenstück zum Splitter eine einfache Alternative:

 Genau wie der Splitter kann der Joiner noch einiges mehr:

  • Maps joinen
  • null-Werte auslassen
  • null-Werte ersetzen
  • Direkt in StringBuilder schreiben
Veröffentlicht in Allgemein, Java, Softwareentwicklung Getagged mit: , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

* Copy This Password *

* Type Or Paste Password Here *