StringBuilder.replace în Java

replace() înlocuiește caracterele dintre două poziții cu un text nou; indexOf() găsește poziția unui subșir.

Sintaxă
StringBuilder replace(int start, int end, String text)
int indexOf(String cautat)
int indexOf(String cautat, int deLa)

Ce face StringBuilder.replace

Spre deosebire de String.replace, care caută un text, StringBuilder.replace(start, end, text) lucrează cu poziții: șterge caracterele de la start până la end (exclusiv) și pune în locul lor text, care poate fi mai lung sau mai scurt.

Ca să înlocuiești un cuvânt, îl găsești întâi cu indexOf, care returnează poziția primei apariții sau -1 dacă nu există. Varianta cu deLa începe căutarea de la o poziție dată, utilă pentru a găsi toate aparițiile.

Parametri

Parametru Descriere
start, end Bucata înlocuită; end exclusiv, poate depăși lungimea.
text Textul pus în loc.
cautat Pentru indexOf: subșirul căutat.
deLa Poziția de la care începe căutarea.

Ce returnează

replace: același StringBuilder. indexOf: poziția găsită sau -1.

Exemple

Exemplul 1: Înlocuirea unui cuvânt găsit cu indexOf

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Ana pleacă la Cluj mâine.");
        String vechi = "Cluj";
        int poz = sb.indexOf(vechi);
        System.out.println("Poziția: " + poz);
        sb.replace(poz, poz + vechi.length(), "Constanța");
        System.out.println(sb);
        System.out.println(sb.indexOf("Iași"));
    }
}

Rezultat

Poziția: 14
Ana pleacă la Constanța mâine.
-1

Exemplul 2: Toate aparițiile unui cuvânt

După fiecare înlocuire, căutarea continuă după textul pus în loc.

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Prețul: {pret} lei. Total: {pret} lei.");
        String cheie = "{pret}";
        String valoare = "45";
        int poz = sb.indexOf(cheie);
        while (poz != -1) {
            sb.replace(poz, poz + cheie.length(), valoare);
            poz = sb.indexOf(cheie, poz + valoare.length());
        }
        System.out.println(sb);
    }
}

Rezultat

Prețul: 45 lei. Total: 45 lei.

Greșeli frecvente

  • Apelezi sb.replace("vechi", "nou") ca la String: nu compilează, StringBuilder nu are această variantă. Folosește indexOf + replace(start, end, text), sau lucrează pe String.
  • Nu verifici dacă indexOf a returnat -1: replace(-1, ...) aruncă StringIndexOutOfBoundsException.

Comenzi înrudite

  • StringBuilder.charAt: charAt() citește caracterul de la o poziție, setCharAt() îl înlocuiește direct în StringBuilder.
  • StringBuilder.delete: delete() șterge caracterele dintre două poziții, deleteCharAt() șterge un singur caracter.
  • String.replace: Înlocuiește toate aparițiile unui caracter sau ale unui text cu altul; textul este căutat literal.
  • String.indexOf: Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unui text sau caracter, ori -1.