Java Language
StringBuilder
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
StringBufferis aanwezig sinds Java 1.0 en biedt een verscheidenheid aan methoden voor het bouwen en wijzigen van een "buffer" met een reeks tekens.De
StringBuilderklasse is toegevoegd in Java 5 om prestatieproblemen met de oorspronkelijkeStringBufferklasse aan te pakken. De API's voor de twee klassen zijn in wezen hetzelfde. Het belangrijkste verschil tussenStringBufferenStringBuilderis 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
Formatterklasse is toegevoegd in Java 5 en is losjes gemodelleerd naar desprintffunctie 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
StringJoinerklasse is toegevoegd in Java 8. Het is een formatter voor speciale doeleinden die een reeks tekenreeksen bondigStringJoinermet 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:
-
StringBuildergeschikt voor elke stringassemblage OF stringwijzigingstaak. -
StringBuffergebruikt (alleen) wanneer u een thread-veilige versie vanStringBuilder. -
Formatterbiedt veel rijkere functionaliteit voorStringBuilder, maar is niet zo efficiënt alsStringBuilder. Dit komt omdat elke aanroep naarFormatter.format(...)meebrengt:- ontleden van de
formatstring, - een varargs- array maken en vullen, en
- argumenten van het primitieve type autoboxen.
- ontleden van de
-
StringJoinerbiedt beknopte en efficiënte opmaak van een reeks tekenreeksen met scheidingstekens, maar is niet geschikt voor andere opmaaktaken.