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 laString: nu compilează,StringBuildernu are această variantă. FoloseșteindexOf+replace(start, end, text), sau lucrează peString. - Nu verifici dacă
indexOfa 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.