Ce face str::split_once
split_once(sep) caută prima apariție a separatorului și returnează Some((stânga, dreapta)), fără separator. Dacă separatorul nu există, returnează None, ceea ce te obligă să tratezi cazul.
Varianta rsplit_once taie la ultima apariție. Ambele sunt ideale pentru cheie: valoare, nume@domeniu, fișier.extensie, mai ales împreună cu if let sau let ... else.
Parametri
| Parametru | Descriere |
|---|---|
delimiter |
Separatorul: char, &str, listă de caractere sau closure. |
Ce returnează
Option<(&str, &str)>.
Exemple
Exemplul 1: Anteturi de tip cheie: valoare
fn main() {
let linii = ["Host: dexblog.ro", "Accept-Language: ro-RO", "linie greșită"];
for linie in linii {
match linie.split_once(": ") {
Some((cheie, valoare)) => println!("{cheie} = {valoare}"),
None => println!("ignorat: {linie:?}"),
}
}
}
Rezultat
Host = dexblog.ro
Accept-Language = ro-RO
ignorat: "linie greșită"
Exemplul 2: Adresă de e-mail cu let … else
fn domeniu(email: &str) -> &str {
let Some((_, dom)) = email.split_once('@') else {
return "(fără domeniu)";
};
dom
}
fn main() {
println!("{}", domeniu("ana.popescu@exemplu.ro"));
println!("{}", domeniu("ana.popescu"));
println!("{:?}", "arhiva.tar.gz".rsplit_once('.'));
}
Rezultat
exemplu.ro
(fără domeniu)
Some(("arhiva.tar", "gz"))
Greșeli frecvente
- Folosești
split(':').collect::<Vec<_>>()și apoiv[1]: dacă separatorul lipsește, indexarea dă panică.split_oncereturneazăNone.
Comenzi înrudite
str::splitn: Împarte textul în cel mult n bucăți; ultima bucată conține tot restul textului, cu separatori cu tot.str::split: Împarte textul în bucăți la fiecare apariție a unui separator; rsplit dă bucățile de la coadă spre început.str::find: Caută prima (find) sau ultima (rfind) apariție și returnează poziția ei în octeți, sau None.str::strip_prefix: Scoate o singură dată un prefix (sau sufix) și returnează restul ca Some; dacă textul nu începe cu el, None.