Zoeken…


Invoering

De klasse Java StringBuilder wordt gebruikt om een veranderlijke (aanpasbare) tekenreeks te maken. De Java StringBuilder-klasse is dezelfde als de StringBuffer-klasse, behalve dat deze niet-gesynchroniseerd is. Het is beschikbaar sinds JDK 1.5.

Syntaxis

  • nieuwe StringBuilder ()

  • nieuwe StringBuilder (int capaciteit)

  • nieuwe StringBuilder (CharSequence seq)

  • nieuwe StringBuilder (StringBuilder builder)

  • nieuwe StringBuilder (String string)

  • nieuwe StringJoiner (CharSequence-scheidingsteken)

  • nieuwe StringJoiner (CharSequence-scheidingsteken, CharSequence-voorvoegsel, CharSequence-achtervoegsel)

Opmerkingen

Het maken van een nieuwe StringBuilder met type char als parameter zou resulteren in het aanroepen van de constructor met argument int capacity en niet degene met 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

Herhaal een string n keer

Probleem: maak een String met n herhalingen van een String s .

De triviale benadering zou de String herhaaldelijk samenvoegen

final int n = ...
final String s = ...
String result = "";

for (int i = 0; i < n; i++) {
    result += s;
}

Dit maakt n nieuwe stringinstanties met 1 tot n herhalingen van s resulterend in een runtime van O(s.length() * n²) = O(s.length() * (1+2+...+(n-1)+n)) .

Om dit te voorkomen moet StringBuilder worden gebruikt, waarmee in plaats daarvan de String in O(s.length() * n) gemaakt:

final int n = ...
final String s = ...

StringBuilder builder = new StringBuilder();

for (int i = 0; i < n; i++) {
    builder.append(s);
}

String result = builder.toString();

StringBuffer, StringBuilder, Formatter en StringJoiner vergelijken

De klassen StringBuffer , StringBuilder , Formatter en StringJoiner zijn Java SE-hulpprogramma's die voornamelijk worden gebruikt voor het samenstellen van tekenreeksen uit andere informatie:

  • De klasse StringBuffer is aanwezig sinds Java 1.0 en biedt een verscheidenheid aan methoden voor het bouwen en wijzigen van een "buffer" met een reeks tekens.

  • De StringBuilder klasse is toegevoegd in Java 5 om prestatieproblemen met de oorspronkelijke StringBuffer klasse aan te pakken. De API's voor de twee klassen zijn in wezen hetzelfde. Het belangrijkste verschil tussen StringBuffer en StringBuilder is dat de eerste thread-safe en gesynchroniseerd is en de laatste niet.

Dit voorbeeld laat zien hoe StringBuilder kan worden gebruikt:

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.

(The StringBuffer klasse wordt gebruikt op dezelfde manier: gewoon verandering StringBuilder om StringBuffer in de hierboven)

De klassen StringBuffer en StringBuilder zijn geschikt voor het samenstellen en wijzigen van tekenreeksen; dat wil zeggen, ze bieden methoden voor het vervangen en verwijderen van tekens en het toevoegen ervan in verschillende. De remining twee klassen zijn specifiek voor de taak van het samenstellen van tekenreeksen.

  • De Formatter klasse is toegevoegd in Java 5 en is losjes gemodelleerd naar de sprintf functie in de C-standaardbibliotheek. Het duurt een format string met ingebedde formaat opdrachtgevers en sequenties van andere argumenten, en genereert een reeks door het omzetten van de argumenten in tekst en vervang ze in plaats van het formaat bestekschrijvers. De details van de opmaakspecificaties geven aan hoe de argumenten worden omgezet in tekst.

  • De StringJoiner klasse is toegevoegd in Java 8. Het is een formatter voor speciale doeleinden die een reeks tekenreeksen bondig StringJoiner met scheidingstekens ertussen. Het is ontworpen met een vloeiende API en kan worden gebruikt met Java 8-streams.

Hier zijn enkele typische voorbeelden van Formatter gebruik:

// 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));

De StringJoiner klasse is niet ideaal voor de bovenstaande taak, dus hier is een voorbeeld van een opmaak van een reeks tekenreeksen.

StringJoiner sj = new StringJoiner(", ", "[", "]");
for (String s : new String[]{"A", "B", "C"}) {
    sj.add(s);
}
System.out.println(sj);
// Prints "[A, B, C]"

De use-cases voor de 4 klassen kunnen worden samengevat:

  • StringBuilder geschikt voor elke stringassemblage OF stringwijzigingstaak.
  • StringBuffer gebruikt (alleen) wanneer u een thread-veilige versie van StringBuilder .
  • Formatter biedt veel rijkere functionaliteit voor StringBuilder , maar is niet zo efficiënt als StringBuilder . Dit komt omdat elke aanroep naar Formatter.format(...) meebrengt:
    • ontleden van de format string,
    • een varargs- array maken en vullen, en
    • argumenten van het primitieve type autoboxen.
  • StringJoiner biedt beknopte en efficiënte opmaak van een reeks tekenreeksen met scheidingstekens, maar is niet geschikt voor andere opmaaktaken.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow