StringBuilder.insert în Kotlin

Construirea textului (buildString, StringBuilder) Kotlin 1.0 (clear: 1.3, deleteCharAt: 1.4)

Modifică un StringBuilder pe loc: insert adaugă la o poziție, reverse inversează, deleteCharAt șterge un caracter, clear golește.

Sintaxă
fun StringBuilder.insert(index: Int, value: Any?): StringBuilder
fun StringBuilder.reverse(): StringBuilder
fun StringBuilder.deleteCharAt(index: Int): StringBuilder
fun StringBuilder.clear(): StringBuilder

Ce face StringBuilder.insert

Spre deosebire de String, un StringBuilder se poate modifica. insert(i, x) pune x înaintea poziției i și mută restul la dreapta. deleteCharAt(i) șterge caracterul de la poziția i. reverse() inversează ordinea caracterelor, iar clear() golește builder-ul ca să îl refolosești.

Toate returnează builder-ul, deci se pot înlănțui. Pozițiile în afara textului aruncă StringIndexOutOfBoundsException. Mai există setCharAt(i, c) (sau sb[i] = c) și delete(start, end).

Parametri

Parametru Descriere
index Poziția (de la 0) la care se inserează sau de unde se șterge.
value Pentru insert: ce se adaugă.

Ce returnează

Același StringBuilder, modificat.

Exemple

Exemplul 1: Inserare și ștergere

Fiecare operație modifică același obiect; afișăm după fiecare pas.

fun main() {
    val sb = StringBuilder("Ana mere")
    sb.insert(4, "are ")
    println(sb)
    sb.insert(0, "Azi, ")
    println(sb)
    sb.deleteCharAt(sb.length - 1)
    println(sb)
}

Rezultat

Ana are mere
Azi, Ana are mere
Azi, Ana are mer

Exemplul 2: Separator de mii

Inserăm un punct la fiecare trei cifre, de la dreapta spre stânga.

fun main() {
    val sb = StringBuilder(1234567.toString())
    var i = sb.length - 3
    while (i > 0) {
        sb.insert(i, '.')
        i -= 3
    }
    println("$sb lei")
}

Rezultat

1.234.567 lei

Exemplul 3: reverse și clear

reverse inversează pe loc. După clear, builder-ul este gol și poate fi refolosit.

fun main() {
    val sb = StringBuilder("Sibiu")
    sb.reverse()
    println(sb)
    sb.clear()
    println("Lungime după clear: ${sb.length}")
    sb.append("Arad")
    println(sb)
}

Rezultat

uibiS
Lungime după clear: 0
Arad

Greșeli frecvente

  • Inserezi de la stânga la dreapta într-o buclă și pozițiile se decalează după fiecare inserare. Pornește de la dreapta, ca în exemplul cu separatorul de mii.
  • Folosești sb.reverse() și apoi te miri că și variabila inițială s-a schimbat. reverse modifică builder-ul; pentru un text nou pe String există reversed().

Comenzi înrudite

  • buildString: buildString construiește un text din bucăți cu append și appendLine, apoi îl returnează ca String.
  • String.reversed: Returnează textul cu caracterele în ordine inversă, de la ultimul la primul.
  • String.toCharArray: Copiază caracterele textului într-un CharArray, un tablou care, spre deosebire de String, poate fi modificat.