Ce face buildString
buildString { ... } creează un StringBuilder gol și ți-l dă în bloc ca this. În interior apelezi append(x) pentru a adăuga o bucată și appendLine(x) pentru a adăuga bucata urmată de rând nou. La final primești textul gata făcut, ca String.
Spre deosebire de text += bucata într-o buclă, care creează un String nou la fiecare pas, StringBuilder adaugă în același obiect, deci este mult mai rapid pentru texte lungi. append returnează builder-ul, așa că apelurile se pot înlănțui: append(a).append(b).
Poți folosi și direct StringBuilder(), apoi toString() la final; buildString face asta pentru tine.
Parametri
| Parametru | Descriere |
|---|---|
builderAction |
Blocul în care adaugi text; this este builder-ul. |
value |
Ce se adaugă; orice tip, transformat în text. |
Ce returnează
buildString: textul construit (String). append/appendLine: același StringBuilder.
Exemple
Exemplul 1: Un bon de cumpărături
Fiecare produs devine un rând cu appendLine; totalul se adaugă la final.
fun main() {
val produse = listOf("pâine" to 4.5, "lapte" to 7.2, "mere" to 6.0)
val bon = buildString {
appendLine("BON FISCAL")
for ((nume, pret) in produse) {
appendLine("$nume: $pret lei")
}
append("Total: ").append(produse.sumOf { it.second }).append(" lei")
}
println(bon)
}
Rezultat
BON FISCAL
pâine: 4.5 lei
lapte: 7.2 lei
mere: 6.0 lei
Total: 17.7 lei
Exemplul 2: Construire într-o buclă
Adăugăm numerele și separatorul doar între ele, nu și după ultimul.
fun main() {
val text = buildString {
for (i in 1..5) {
if (i > 1) append(", ")
append(i * i)
}
}
println("Pătrate: $text")
}
Rezultat
Pătrate: 1, 4, 9, 16, 25
Exemplul 3: StringBuilder folosit direct
Același rezultat, fără buildString: creăm builder-ul, adăugăm și apelăm toString().
fun main() {
val sb = StringBuilder()
sb.append("Ana")
sb.append(' ')
sb.append(21)
sb.appendLine(" de ani")
sb.append("Iași")
println(sb.toString())
println("Lungime: ${sb.length}")
}
Rezultat
Ana 21 de ani
Iași
Lungime: 18
Greșeli frecvente
- Construiești un text mare cu
+=într-o buclă de mii de pași. Fiecare pas copiază tot textul; foloseștebuildString. - Uiți că în
buildStringrezultatul este textul, nu ultima expresie din bloc: blocul returneazăUnit, iarbuildStringreturnează ce ai adăugat.
Comenzi înrudite
StringBuilder.insert: Modifică un StringBuilder pe loc: insert adaugă la o poziție, reverse inversează, deleteCharAt șterge un caracter, clear golește.String.repeat: repeat construiește un text din n copii ale textului; plus (operatorul +) lipește două texte.apply: Configurează un obiect într-un bloc în care obiectul este this, apoi returnează chiar obiectul.String.trimIndent: Elimină indentarea comună din textele pe mai multe rânduri scrise cu „”” … „”” în cod.