StringBuilder.insert în Java

Inserează un text sau o valoare la o poziție dată; caracterele de după poziție se mută spre dreapta.

Sintaxă
StringBuilder insert(int pozitie, String s)
StringBuilder insert(int pozitie, char c)   // și int, double, boolean, Object...

Ce face StringBuilder.insert

insert(pozitie, valoare) pune valoarea înaintea caracterului de la pozitie. Poziția 0 înseamnă la început, iar length() înseamnă la sfârșit (la fel ca append).

Ca și append, există variante pentru toate tipurile, iar metoda returnează același obiect. O poziție negativă sau mai mare decât lungimea aruncă StringIndexOutOfBoundsException.

Parametri

Parametru Descriere
pozitie Indicele unde se inserează, între 0 și length().
s / c / ... Valoarea inserată.

Ce returnează

Același StringBuilder.

Exemple

Exemplul 1: Inserare la început, la mijloc și la sfârșit

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Popescu");
        sb.insert(0, "Ana ");
        System.out.println(sb);
        sb.insert(4, "Maria ");
        System.out.println(sb);
        sb.insert(sb.length(), '!');
        System.out.println(sb);
    }
}

Rezultat

Ana Popescu
Ana Maria Popescu
Ana Maria Popescu!

Exemplul 2: Separator de mii pentru o sumă

Pornim de la dreapta și inserăm un punct la fiecare 3 cifre.

public class Main {
    static String cuPuncte(long suma) {
        StringBuilder sb = new StringBuilder(Long.toString(suma));
        for (int i = sb.length() - 3; i > 0; i -= 3) {
            sb.insert(i, '.');
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(cuPuncte(2500) + " lei");
        System.out.println(cuPuncte(1250000) + " lei");
        System.out.println(cuPuncte(999) + " lei");
    }
}

Rezultat

2.500 lei
1.250.000 lei
999 lei

Exemplul 3: Poziție greșită

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Cluj");
        try {
            sb.insert(10, "-Napoca");
        } catch (StringIndexOutOfBoundsException e) {
            System.out.println("Eroare: " + e.getMessage());
        }
        sb.insert(4, "-Napoca");
        System.out.println(sb);
    }
}

Rezultat

Eroare: Range [10, 4) out of bounds for length 4
Cluj-Napoca

Greșeli frecvente

  • Inserezi mai multe valori de la stânga la dreapta într-o buclă și uiți că fiecare inserare mută pozițiile de după ea. De aceea, în exemplul cu puncte, bucla merge de la dreapta spre stânga.
  • Folosești insert(0, ...) într-o buclă foarte mare: fiecare inserare la început mută tot textul. Dacă poți, adaugă la sfârșit și apoi folosește reverse() sau altă ordine.

Comenzi înrudite

  • StringBuilder.append: Adaugă la sfârșitul textului un șir, un caracter, un număr sau orice obiect și returnează același StringBuilder.
  • StringBuilder.delete: delete() șterge caracterele dintre două poziții, deleteCharAt() șterge un singur caracter.
  • StringBuilder.replace: replace() înlocuiește caracterele dintre două poziții cu un text nou; indexOf() găsește poziția unui subșir.
  • StringBuilder: Un text care se poate modifica pe loc: adaugi, inserezi și ștergi fără să creezi un șir nou la fiecare pas.