Verketten von Strings in Java

1. Einleitung

Java bietet eine beträchtliche Anzahl von Methoden und Klassen für die Verkettung von Strings.

In diesem Tutorial werden wir uns mit einigen von ihnen befassen und einige häufige Fallstricke und schlechte Praktiken skizzieren.

2. StringBuilder

An erster Stelle steht der bescheidene StringBuilder. Diese Klasse bietet eine Reihe von String- Gebäude Dienstprogramme , die einfache Arbeit der macht String - Manipulation.

Sie baut ein kurzes Beispiel der String - Verkettung , die unter Verwendung von Stringklasse:

StringBuilder stringBuilder = new StringBuilder(100); stringBuilder.append("Baeldung"); stringBuilder.append(" is"); stringBuilder.append(" awesome"); assertEquals("Baeldung is awesome", stringBuilder.toString());

Intern verwaltet StringBuilder ein veränderbares Zeichenarray. In unserem Codebeispiel haben wir über den StringBuilder- Konstruktor eine Anfangsgröße von 100 angegeben . Aufgrund dieser Größendeklaration kann der StringBuilder eine sehr effiziente Möglichkeit sein, Strings zu verketten .

Es ist auch erwähnenswert, dass die StringBuffer- Klasse die synchronisierte Version von StringBuilder ist .

Obwohl Synchronisation oft gleichbedeutend mit Thread-Sicherheit ist, wird sie aufgrund des Builder-Musters von StringBuffer nicht für die Verwendung in Multithread-Anwendungen empfohlen . Während einzelne Aufrufe einer synchronisierten Methode threadsicher sind, sind dies bei mehreren Aufrufen nicht der Fall.

3. Additionsoperator

Als nächstes kommt der Additionsoperator (+). Dies ist derselbe Operator, der zum Hinzufügen von Zahlen führt und überladen ist, um zu verketten, wenn er auf Strings angewendet wird .

Lassen Sie uns einen kurzen Blick darauf werfen, wie dies funktioniert:

String myString = "The " + "quick " + "brown " + "fox..."; assertEquals("The quick brown fox...", myString);

Auf den ersten Blick scheint dies viel prägnanter zu sein als die Option StringBuilder . Beim Kompilieren des Quellcodes wird das Symbol + jedoch in Ketten von StringBuilder.append () -Aufrufen übersetzt. Aus diesem Grund wird das Mischen der Verkettungsmethode StringBuilder und + als schlechte Praxis angesehen .

Zusätzlich String sollte den Operator + innerhalb einer Schleife Verkettungs Verwendung vermieden werden. Da das String- Objekt unveränderlich ist, wird bei jedem Aufruf zur Verkettung ein neues String- Objekt erstellt.

4. String- Methoden

Die String- Klasse selbst bietet eine Vielzahl von Methoden zum Verketten von Strings.

4.1. String.concat

Es überrascht nicht, dass die String.concat- Methode unsere erste Anlaufstelle ist, wenn wir versuchen, String- Objekte zu verketten . Diese Methode gibt ein String- Objekt zurück, daher ist das Verketten der Methode eine nützliche Funktion.

String myString = "Both".concat(" fickle") .concat(" dwarves") .concat(" jinx") .concat(" my") .concat(" pig") .concat(" quiz"); assertEquals("Both fickle dwarves jinx my pig quiz", myString);

In diesem Beispiel wird unsere Kette mit einem String- Literal gestartet. Mit der concat- Methode können wir dann die Aufrufe verketten , um weitere Strings anzuhängen .

4.2. String.format

Als nächstes folgt die String.format- Methode, mit der wir eine Vielzahl von Java- Objekten in eine String- Vorlage einfügen können .

Die Signatur der String.format- Methode verwendet einen einzelnen String , der unsere Vorlage angibt . Diese Vorlage enthält '%' Zeichen, um darzustellen, wo sich die verschiedenen Objekte befindensollte darin platziert werden.

Sobald unsere Vorlage deklariert ist, wird ein varargs Object- Array verwendet, das in die Vorlage eingefügt wird .

Lassen Sie uns anhand eines kurzen Beispiels sehen, wie dies funktioniert:

String myString = String.format("%s %s %.2f %s %s, %s...", "I", "ate", 2.5056302, "blueberry", "pies", "oops"); assertEquals("I ate 2.51 blueberry pies, oops...", myString);

Wie wir oben sehen können, hat die Methode unsere Strings in das richtige Format eingefügt.

4.3. String.join (Java 8+)

Wenn unsere Anwendung unter Java 8 oder höher ausgeführt wird , können wir die String.join- Methode nutzen. Auf diese Weise können wir eine Reihe von Zeichenfolgen mit einem gemeinsamen Trennzeichen verbinden , um sicherzustellen, dass keine Leerzeichen übersehen werden.

String[] strings = {"I'm", "running", "out", "of", "pangrams!"}; String myString = String.join(" ", strings); assertEquals("I'm running out of pangrams!", myString); 

Ein großer Vorteil dieser Methode ist, dass Sie sich nicht um das Trennzeichen zwischen unseren Zeichenfolgen kümmern müssen.

5. StringJoiner (Java 8+)

StringJoiner abstrahiert die gesamte String.join- Funktionalität in eine einfach zu verwendende Klasse. Der Konstruktor verwendet ein Trennzeichen mit einem optionalen Präfix und Suffix . Wir können Strings mit der bekannten Methode add anhängen .

StringJoiner fruitJoiner = new StringJoiner(", "); fruitJoiner.add("Apples"); fruitJoiner.add("Oranges"); fruitJoiner.add("Bananas"); assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());

Mit dieser Klasse können wir anstelle der String.join- Methode Strings anhängen, während das Programm ausgeführt wird . Das Array muss nicht zuerst erstellt werden!

Weitere Informationen und Beispiele finden Sie in unserem Artikel über StringJoiner .

6. Arrays.toString

Zum Thema Arrays enthält die Array- Klasse auch eine praktische toString- Methode, mit der ein Array von Objekten gut formatiert werden kann. Die Arrays. Die toString- Methode ruft auch die toString- Methode eines eingeschlossenen Objekts auf. Daher müssen wir sicherstellen, dass eines definiert ist.

String[] myFavouriteLanguages = {"Java", "JavaScript", "Python"}; String toString = Arrays.toString(myFavouriteLanguages); assertEquals("[Java, JavaScript, Python]", toString);

Leider sind die Arrays. Die toString- Methode ist nicht anpassbar und gibt nur einen String in eckigen Klammern aus.

7. Collectors.joining (Java 8+)

Schauen wir uns zum Schluss die Collectors.joining- Methode an, mit der wir die Ausgabe eines Streams in einen einzelnen String umwandeln können.

List awesomeAnimals = Arrays.asList("Shark", "Panda", "Armadillo"); String animalString = awesomeAnimals.stream().collect(Collectors.joining(", ")); assertEquals("Shark, Panda, Armadillo", animalString);

Durch die Verwendung von Streams werden alle mit der Java 8 Stream- API verbundenen Funktionen wie Filtern, Zuordnen, Iterieren und mehr freigeschaltet.

8. Packen Sie ein

In diesem Artikel haben wir uns eingehend mit der Vielzahl von Klassen und Methoden befasst, mit denen Strings verkettet werdenin der Java-Sprache.

Wie immer ist der Quellcode über GitHub verfügbar.