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ünglichen StringBuffer Klasse zu StringBuffer . Die APIs für die beiden Klassen sind im Wesentlichen gleich. Der Hauptunterschied zwischen StringBuffer und StringBuilder 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 der sprintf 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 von StringBuilder benötigen.
  • Formatter bietet eine reichhaltigere String-Formatierungsfunktion, ist jedoch nicht so effizient wie StringBuilder . Dies liegt daran, dass jeder Aufruf von Formatter.format(...) Folgendes umfasst:
    • Parsen des format - String,
    • Erstellen und Auffüllen eines varargs- Arrays und
    • autoboxing für alle primitiven Argumente.
  • StringJoiner eine StringJoiner und effiziente Formatierung einer Folge von Strings mit Trennzeichen, eignet sich jedoch nicht für andere Formatierungsaufgaben.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow