StringBuilder voor efficiënte concatenatie
Gebruik StringBuilder om binnen lussen en bij complexe opmaak efficiënt tekenreeksen op te bouwen.
StringBuilder voor efficiënte concatenatie is een gratis Java Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.
StringBuilder voor efficiënt samenvoegen
StringBuilder is een veranderlijk alternatief voor String om tekst stapsgewijs op te bouwen. Het voorkomt dat er veel tussentijdse String-objecten worden aangemaakt.
StringBuilder tegenover String-samenvoeging
Wanneer je veel strings samenvoegt, vooral in lussen, is StringBuilder aanzienlijk sneller omdat het een interne tekenbuffer wijzigt in plaats van nieuwe objecten aan te maken.
// Inefficient: creates a new String every iteration
String result = "";
for (int i = 0; i < 1000; i++) {
result += i + ","; // 1000 new String objects!
}
// Efficient: StringBuilder uses a resizable char buffer
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i).append(',');
}
String efficient = sb.toString(); // one final String createdStringBuilder-API
Belangrijke methoden: append, insert, delete, replace, reverse, toString, length, charAt, setCharAt.
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World"); // Hello, World
sb.insert(5, "!"); // Hello!, World
sb.delete(5, 6); // Hello, World
sb.replace(7, 12, "Java"); // Hello, Java
sb.reverse(); // avaJ ,olleH
sb.reverse(); // Hello, Java
System.out.println(sb); // Hello, Java
System.out.println(sb.length()); // 11
System.out.println(sb.charAt(0)); // Happend-aanroepen ketenen
Alle append-methoden en andere methoden die wijzigingen aanbrengen retourneren this, waardoor je aanroepen vloeiend kunt ketenen.
StringBuilder html = new StringBuilder()
.append("<div class=\"card\">")
.append("<h2>").append("Product Title").append("</h2>")
.append("<p>Price: $").append(String.format("%.2f", 29.99)).append("</p>")
.append("<button>Add to Cart</button>")
.append("</div>");
System.out.println(html.toString());Initiële capaciteit
Geef StringBuilder vooraf de verwachte capaciteit om het opnieuw vergroten van de interne array te voorkomen. Dit verbetert de prestaties bij grote strings.
// Default capacity: 16 chars
StringBuilder small = new StringBuilder();
// Pre-sized: 10 items * ~50 chars each
StringBuilder report = new StringBuilder(500);
for (int i = 1; i <= 10; i++) {
report.append(String.format("%-3d. Record %04d: processed OK%n", i, i));
}
System.out.println(report.toString().substring(0, 30));
// " 1. Record 0001: processed OK"deleteCharAt en gerichte verwijderingen
deleteCharAt verwijdert één teken. delete(start, end) verwijdert een bereik. Deze bewerkingen zijn O(n) doordat de array moet worden verschoven.
StringBuilder sb = new StringBuilder("Hello, World!");
sb.deleteCharAt(5); // removes comma: "Hello World!"
sb.delete(5, 6); // removes space: "HelloWorld!"
System.out.println(sb); // HelloWorld!
// Replace to fix a typo
StringBuilder typo = new StringBuilder("Helo, Java!");
typo.replace(typo.indexOf("Helo"), typo.indexOf("Helo") + 4, "Hello");
System.out.println(typo); // Hello, Java!CSV opbouwen
Een praktisch patroon: een CSV-regel opbouwen met StringBuilder en de scheidingstekens correct afhandelen.
import java.util.List;
static String toCsv(List<String> values) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.size(); i++) {
if (i > 0) sb.append(',');
sb.append(escapeCsv(values.get(i)));
}
return sb.toString();
}
static String escapeCsv(String s) {
if (s.contains(",") || s.contains("\""))
return "\"" + s.replace("\"", "\"\"") + "\"";
return s;
}
System.out.println(toCsv(List.of("Alice", "Smith, Jr.", "30")));
// Alice,"Smith, Jr.",30StringJoiner voor uitvoer met scheidingstekens
StringJoiner vereenvoudigt het samenvoegen van elementen met een scheidingsteken, een optioneel voorvoegsel en achtervoegsel — handmatige afhandeling van scheidingstekens is niet nodig.
import java.util.StringJoiner;
StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("Alice");
sj.add("Bob");
sj.add("Charlie");
System.out.println(sj.toString()); // [Alice, Bob, Charlie]
// Equivalent with String.join
String joined = String.join(", ", "Alice", "Bob", "Charlie");
System.out.println(joined); // Alice, Bob, Charlie
// Streams: collect with joining collector
import java.util.stream.*;
List.of("a", "b", "c").stream()
.collect(Collectors.joining(", ", "(", ")"));
// (a, b, c)StringBuilder tegenover StringBuffer
StringBuffer is de threadveilige, gesynchroniseerde versie van StringBuilder. Deze is trager door de vergrendeling. Gebruik StringBuilder in contexten met één thread, dus in 99% van de gevallen.
// StringBuffer: thread-safe but slower (synchronized methods)
StringBuffer buf = new StringBuffer();
buf.append("Thread-safe");
buf.append(" but slow");
// StringBuilder: not thread-safe but faster
StringBuilder sb = new StringBuilder();
sb.append("Fast");
sb.append(" single-threaded");
// When to use StringBuffer:
// - Multiple threads write to the same buffer
// - Almost always a design smell — redesign to avoid sharingOmkeren en palindromen controleren
Met de ingebouwde reverse() van StringBuilder wordt het controleren op palindromen elegant.
static boolean isPalindrome(String s) {
String cleaned = s.toLowerCase()
.replaceAll("[^a-z0-9]", ""); // remove non-alphanumeric
String reversed = new StringBuilder(cleaned).reverse().toString();
return cleaned.equals(reversed);
}
System.out.println(isPalindrome("A man, a plan, a canal: Panama")); // true
System.out.println(isPalindrome("race a car")); // false
System.out.println(isPalindrome("Was it a car or a cat I saw?")); // truePraktisch: SQL-querybouwer
Een dynamische SQL-query opbouwen met StringBuilder, waarbij WHERE-clausules voorwaardelijk worden toegevoegd.
static String buildQuery(String category, Double minPrice, Double maxPrice) {
StringBuilder sql = new StringBuilder("SELECT * FROM products WHERE 1=1");
if (category != null)
sql.append(" AND category = '" + category + "'");
if (minPrice != null)
sql.append(" AND price >= ").append(minPrice);
if (maxPrice != null)
sql.append(" AND price <= ").append(maxPrice);
sql.append(" ORDER BY name");
return sql.toString();
}
System.out.println(buildQuery("Electronics", 50.0, null));
// SELECT * FROM products WHERE 1=1 AND category = 'Electronics' AND price >= 50.0 ORDER BY nameKorte controle
Waarom is het samenvoegen van strings met + inefficiënt in lussen?
Samenvatting: StringBuilder voor efficiënt samenvoegen
Belangrijkste punten:
- StringBuilder is veranderlijk — append/insert/delete wijzigen een interne buffer
- Gebruik StringBuilder in lussen om het aanmaken van O(n²) String-objecten te voorkomen
- Alle methoden die wijzigingen aanbrengen retourneren this — daardoor kun je aanroepen vloeiend ketenen
- Geef StringBuilder vooraf de verwachte capaciteit om het opnieuw vergroten van de interne buffer te beperken
- StringJoiner en String.join zijn handig voor uitvoer met scheidingstekens
- StringBuffer is het gesynchroniseerde, dus threadveilige, maar tragere alternatief
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “StringBuilder voor efficiënte concatenatie” gratis?
Ja — de volledige tekst van “StringBuilder voor efficiënte concatenatie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.
Wat leer ik in “StringBuilder voor efficiënte concatenatie”?
Gebruik StringBuilder om binnen lussen en bij complexe opmaak efficiënt tekenreeksen op te bouwen. Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “StringBuilder voor efficiënte concatenatie”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Onveranderlijkheid van String en de String-pool
- StringBuilder voor efficiënte concatenatie
- Tekstblokken en String.format
- Reguliere expressies met Pattern en Matcher