Java Language
StringBuilder
Suche…
Einführung
Die Java-StringBuilder-Klasse wird zum Erstellen einer veränderbaren (veränderbaren) Zeichenfolge verwendet. Die Java-StringBuilder-Klasse ist mit der StringBuffer-Klasse identisch, außer dass sie nicht synchronisiert ist. Es ist seit JDK 1.5 verfügbar.
Syntax
neuer StringBuilder ()
neuer StringBuilder (int. Kapazität)
neuer StringBuilder (CharSequence-Sequenz)
neuer StringBuilder (Builder für StringBuilder)
neuer StringBuilder (String string)
neuer StringJoiner (CharSequence-Trennzeichen)
neuer StringJoiner (Trennzeichen CharSequence, Präfix CharSequence, Suffix CharSequence)
Bemerkungen
Das Erstellen eines neuen StringBuilder mit dem Typ char als Parameter würde dazu führen, dass der Konstruktor mit dem Argument int capacity und nicht mit dem Argument String string :
StringBuilder v = new StringBuilder('I'); //'I' is a character, "I" is a String.
System.out.println(v.capacity()); --> output 73
System.out.println(v.toString()); --> output nothing
Wiederholen Sie einen String n-mal
Problem: Erstellen Sie einen String mit n Wiederholungen eines String s .
Der triviale Ansatz würde den String wiederholt verketten
final int n = ...
final String s = ...
String result = "";
for (int i = 0; i < n; i++) {
result += s;
}
Dadurch werden n neue String-Instanzen mit 1 bis n Wiederholungen von s die zu einer Laufzeit von O(s.length() * n²) = O(s.length() * (1+2+...+(n-1)+n)) .
Um dies zu vermeiden StringBuilder sollte verwendet werden, die die ermöglicht die Erstellung von String in O(s.length() * n) statt:
final int n = ...
final String s = ...
StringBuilder builder = new StringBuilder();
for (int i = 0; i < n; i++) {
builder.append(s);
}
String result = builder.toString();
Vergleich von StringBuffer, StringBuilder, Formatter und StringJoiner
Die Klassen StringBuffer , StringBuilder , Formatter und StringJoiner sind Java SE-Dienstprogrammklassen, die hauptsächlich zum Zusammenstellen von Zeichenfolgen aus anderen Informationen verwendet werden:
Die
StringBufferKlasse ist seit Java 1.0 vorhanden und bietet verschiedene Methoden zum Erstellen und Ändern eines "Puffers", der eine Folge von Zeichen enthält.Die
StringBuilderKlasse wurde in Java 5 hinzugefügt, um Leistungsprobleme mit der ursprünglichenStringBufferKlasse zuStringBuffer. Die APIs für die beiden Klassen sind im Wesentlichen gleich. Der Hauptunterschied zwischenStringBufferundStringBuilderbesteht darin, dass ersterer threadsicher und synchronisiert ist und letzterer nicht.
Dieses Beispiel zeigt, wie StringBuilder verwendet werden kann:
int one = 1;
String color = "red";
StringBuilder sb = new StringBuilder();
sb.append("One=").append(one).append(", Color=").append(color).append('\n');
System.out.print(sb);
// Prints "One=1, Colour=red" followed by an ASCII newline.
(Die StringBuffer Klasse wird auf dieselbe Weise verwendet: Ändern Sie einfach StringBuilder in StringBuffer oben).
Die Klassen StringBuffer und StringBuilder eignen sich sowohl zum Zusammenstellen als auch zum Ändern von Zeichenfolgen. dh sie bieten Methoden zum Ersetzen und Entfernen von Zeichen sowie zum Hinzufügen verschiedener Zeichen. Die verbleibenden zwei Klassen sind spezifisch für die Aufgabe des Zusammenstellens von Strings.
Die
FormatterKlasse wurde in Java 5 hinzugefügt und basiert auf dersprintfFunktion in der C-Standardbibliothek. Es dauert einen Format - String mit eingebetteten Formatbezeich und A - Sequenzen von anderen Argumenten, und erzeugt eine Zeichenfolge , die durch die Argumente in Text umzuwandeln und sie an der Stelle der Formatbezeich ersetzen. Die Details der Formatbezeichner geben an, wie die Argumente in Text umgewandelt werden.Die
StringJoinerKlasse wurde in Java 8 hinzugefügt. Es ist ein Formatierungsprogramm für spezielle Zwecke, das eine Folge von Zeichenfolgen mit Trennzeichen zwischen ihnen formatiert. Es verfügt über eine fließende API und kann mit Java 8-Streams verwendet werden.
Hier einige typische Beispiele für die Verwendung von Formatter :
// This does the same thing as the StringBuilder example above
int one = 1;
String color = "red";
Formatter f = new Formatter();
System.out.print(f.format("One=%d, colour=%s%n", one, color));
// Prints "One=1, Colour=red" followed by the platform's line separator
// The same thing using the `String.format` convenience method
System.out.print(String.format("One=%d, color=%s%n", one, color));
Die StringJoiner Klasse ist für die obige Task nicht ideal. StringJoiner wird hier ein Beispiel für das Formatieren eines Arrays von Strings angegeben.
StringJoiner sj = new StringJoiner(", ", "[", "]");
for (String s : new String[]{"A", "B", "C"}) {
sj.add(s);
}
System.out.println(sj);
// Prints "[A, B, C]"
Die Anwendungsfälle für die 4 Klassen können zusammengefasst werden:
-
StringBuilderfür alle Modifikationsaufgaben für String-Assemblys ODER-Strings geeignet. -
StringBufferwird (nur) verwendet, wenn Sie eine Thread-sichere Version vonStringBuilderbenötigen. -
Formatterbietet eine reichhaltigere String-Formatierungsfunktion, ist jedoch nicht so effizient wieStringBuilder. Dies liegt daran, dass jeder Aufruf vonFormatter.format(...)Folgendes umfasst:- Parsen des
format- String, - Erstellen und Auffüllen eines varargs- Arrays und
- autoboxing für alle primitiven Argumente.
- Parsen des
-
StringJoinereineStringJoinerund effiziente Formatierung einer Folge von Strings mit Trennzeichen, eignet sich jedoch nicht für andere Formatierungsaufgaben.