Ce face strings.ReplaceAll
strings.ReplaceAll(s, old, new) returnează un text nou în care fiecare apariție a lui old a fost înlocuită cu new. Textul inițial nu se schimbă: în Go textele sunt imuabile.
strings.Replace(s, old, new, n) înlocuiește doar primele n apariții; cu n = -1 le înlocuiește pe toate, exact ca ReplaceAll. Dacă new este gol, aparițiile sunt șterse.
Pentru mai multe înlocuiri deodată folosește strings.NewReplacer("ș", "s", "ț", "t"). Primește perechi vechi, nou (un număr par de argumente; altfel panic) și returnează un *strings.Replacer, pe care îl creezi o dată și îl folosești de oricâte ori cu r.Replace(text) sau r.WriteString(w, text). Toate înlocuirile se fac într-o singură trecere prin text, deci o înlocuire nu o afectează pe alta; la aceeași poziție câștigă perechea scrisă prima. Un Replacer poate fi folosit din mai multe goroutine. Pentru tipare (orice număr, orice spațiu) folosește regexp.ReplaceAllString.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul inițial. |
old |
Textul căutat. |
new |
Textul pus în loc (poate fi gol, pentru ștergere). |
n |
La Replace: câte înlocuiri se fac (-1 = toate). |
Ce returnează
Un text nou, cu înlocuirile făcute.
Exemple
Exemplul 1: Înlocuire completă și parțială
package main
import (
"fmt"
"strings"
)
func main() {
s := "pisica, pisica, pisica"
fmt.Println(strings.ReplaceAll(s, "pisica", "câinele"))
fmt.Println(strings.Replace(s, "pisica", "câinele", 1))
fmt.Println(strings.Replace(s, "pisica", "câinele", 2))
fmt.Println(strings.ReplaceAll("0721 000 111", " ", ""))
fmt.Println("originalul rămâne:", s)
}
Rezultat
câinele, câinele, câinele
câinele, pisica, pisica
câinele, câinele, pisica
0721000111
originalul rămâne: pisica, pisica, pisica
Exemplul 2: Mai multe înlocuiri cu strings.NewReplacer
Replacer face toate înlocurile într-o singură trecere. Aici scoatem diacriticele pentru un nume de fișier.
package main
import (
"fmt"
"strings"
)
func main() {
faraDiacritice := strings.NewReplacer(
"ă", "a", "â", "a", "î", "i", "ș", "s", "ț", "t",
"Ă", "A", "Â", "A", "Î", "I", "Ș", "S", "Ț", "T",
" ", "-",
)
fmt.Println(faraDiacritice.Replace("Știri din Târgu Mureș și Brăila"))
}
Rezultat
Stiri-din-Targu-Mures-si-Braila
Greșeli frecvente
- Apelezi
strings.ReplaceAll(s, "a", "b")fără să salvezi rezultatul.snu se schimbă; scries = strings.ReplaceAll(s, "a", "b"). - Faci înlocuiri în lanț care se influențează între ele (a→b, apoi b→c transformă și literele a în c).
strings.NewReplacerface toate înlocuirile odată, fără acest efect. - Cu
oldgol, Replace insereazănewînainte de fiecare caracter și la final, rareori ce vrei.
Comenzi înrudite
strings.Map: Transformă fiecare caracter al textului cu o funcție; dacă funcția returnează -1, caracterul este șters.regexp.Regexp.ReplaceAllString: Înlocuiește toate potrivirile cu un text (care poate folosi grupurile $1, ${nume}) sau cu rezultatul unei funcții.strings.Trim: Scoate de la capete orice caracter din setul dat: Trim la ambele capete, TrimLeft doar la început, TrimRight doar la sfârșit.