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
StringBuffer
Klasse ist seit Java 1.0 vorhanden und bietet verschiedene Methoden zum Erstellen und Ändern eines "Puffers", der eine Folge von Zeichen enthält.Die
StringBuilder
Klasse wurde in Java 5 hinzugefügt, um Leistungsprobleme mit der ursprünglichenStringBuffer
Klasse zuStringBuffer
. Die APIs für die beiden Klassen sind im Wesentlichen gleich. Der Hauptunterschied zwischenStringBuffer
undStringBuilder
besteht 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
Formatter
Klasse wurde in Java 5 hinzugefügt und basiert auf dersprintf
Funktion 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
StringJoiner
Klasse 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:
-
StringBuilder
für alle Modifikationsaufgaben für String-Assemblys ODER-Strings geeignet. -
StringBuffer
wird (nur) verwendet, wenn Sie eine Thread-sichere Version vonStringBuilder
benötigen. -
Formatter
bietet 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
-
StringJoiner
eineStringJoiner
und effiziente Formatierung einer Folge von Strings mit Trennzeichen, eignet sich jedoch nicht für andere Formatierungsaufgaben.