Ce face strings.Split
strings.Split(s, sep) taie textul la fiecare apariție a lui sep și returnează bucățile într-un slice. Separatorul nu apare în rezultat. Bucățile goale sunt păstrate: "a,,b" dă ["a" "" "b"]. Dacă sep este gol, textul este împărțit în caractere UTF-8.
SplitN(s, sep, n) returnează cel mult n bucăți; ultima conține tot restul textului, nedespărțit. Cu n = -1 se comportă ca Split, iar cu n = 0 returnează nil.
SplitAfter și SplitAfterN taie după separator și îl lasă la capătul fiecărei bucăți. Astfel, alipirea bucăților dă exact textul inițial.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul de împărțit. |
sep |
Separatorul exact, de exemplu ",", "; ", "\n". |
n |
La SplitN și SplitAfterN: numărul maxim de bucăți (-1 = toate). |
Ce returnează
Un slice []string. Pentru s gol și sep nenul: un slice cu o bucată goală, [""].
Exemple
Exemplul 1: Un rând CSV simplu
package main
import (
"fmt"
"strings"
)
func main() {
rand := "Ana,Popescu,Iași,,10"
campuri := strings.Split(rand, ",")
fmt.Printf("%q\n", campuri)
fmt.Println(len(campuri), "câmpuri; orașul:", campuri[2])
fmt.Printf("%q\n", strings.Split("", ","))
fmt.Printf("%q\n", strings.Split("Țară", ""))
}
Rezultat
["Ana" "Popescu" "Iași" "" "10"]
5 câmpuri; orașul: Iași
[""]
["Ț" "a" "r" "ă"]
Exemplul 2: SplitN: doar prima despărțire
Mesajul conține și el „: ”, dar cu n = 2 doar prima apariție desparte.
package main
import (
"fmt"
"strings"
)
func main() {
linie := "Ana: Ne vedem la 18: 30 în Piața Unirii"
parti := strings.SplitN(linie, ": ", 2)
fmt.Printf("autor: %q\nmesaj: %q\n", parti[0], parti[1])
fmt.Printf("%q\n", strings.Split(linie, ": "))
}
Rezultat
autor: "Ana"
mesaj: "Ne vedem la 18: 30 în Piața Unirii"
["Ana" "Ne vedem la 18" "30 în Piața Unirii"]
Exemplul 3: SplitAfter păstrează separatorul
package main
import (
"fmt"
"strings"
)
func main() {
text := "Prima propoziție. A doua. A treia"
parti := strings.SplitAfter(text, ". ")
fmt.Printf("%q\n", parti)
fmt.Println(strings.Join(parti, "") == text)
fmt.Printf("%q\n", strings.SplitAfterN(text, ". ", 2))
}
Rezultat
["Prima propoziție. " "A doua. " "A treia"]
true
["Prima propoziție. " "A doua. A treia"]
Greșeli frecvente
- Te aștepți ca
Split("", ",")să dea un slice gol. Dă[""], cu lungime 1. Verifică textul gol înainte. - Folosești
Split(s, " ")pentru cuvinte. Spațiile duble produc bucăți goale; foloseștestrings.Fields. - Accesezi
parti[1]fără să verificilen(parti). Dacă separatorul lipsește, slice-ul are o singură bucată și programul se oprește cuindex out of range. Pentru două părți,strings.Cuteste mai sigur. - Desparți fișiere CSV reale cu
Split. Câmpurile între ghilimele pot conține virgule; folosește pachetulencoding/csv.
Comenzi înrudite
strings.Fields: Împarte textul în cuvinte după spații (oricâte, inclusiv tab și rând nou); FieldsFunc după o condiție a ta.strings.SplitSeq: Variantele iterator ale lui Split, SplitAfter, Fields și FieldsFunc, plus Lines: parcurgi bucățile cu for range, fără slice.strings.Join: Lipește textele dintr-un slice într-un singur text, cu un separator între ele.strings.Cut: Taie textul în două la prima (Cut) sau ultima (CutLast) apariție a separatorului și spune dacă l-a găsit.regexp.Regexp.Split: Împarte textul în bucăți acolo unde se potrivește expresia regulată, de exemplu după orice combinație de virgule și spații.bytes.Split: Split împarte un []byte după un separator în mai multe slice-uri; Join le lipește la loc cu un separator.