Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Разбиение на фрагменты по разделителю
Выполнить разбиение на фрагменты по разделителю позволяют следующие функции из пакета strings
:
Split()
— возвращает строковый слайс с фрагментами изs
разделенныеsep
. Еслиsep
пустая строка, то возвращается слайс с символами Unicode. Формат функции:
strings.Split(s string, sep string) []string
Пример:
s := "word1;word2;;word3"
arr1 := strings.Split(s, ";")
fmt.Printf("%q\n", arr1) // ["word1" "word2" "" "word3"]
arr2 := strings.Split(s, "")
fmt.Printf("%q\n", arr2)
// ["w" "o" "r" "d" "1" ";" "w" "o" "r" "d" "2" ";"
// ";" "w" "o" "r" "d" "3"]
arr3 := strings.Split(s, "_")
fmt.Printf("%q\n", arr3) // ["word1;word2;;word3"]
SplitN()
— аналогична функцииSplit()
, но дополнительно позволяет указать максимальное число фрагментов. Формат функции:
strings.SplitN(s string, sep string, n int) []string
Если n
больше нуля, то значение означает максимальное число фрагментов. Чтобы снять ограничение достаточно передать отрицательное значение. Если n
равно 0
, то возвращается значение nil
. Пример:
s := "word1;word2;;word3"
arr1 := strings.SplitN(s, ";", 2)
fmt.Printf("%q\n", arr1) // ["word1" "word2;;word3"]
arr2 := strings.SplitN(s, ";", -1)
fmt.Printf("%q\n", arr2) // ["word1" "word2" "" "word3"]
arr3 := strings.SplitN("тест", "", 3)
fmt.Printf("%q\n", arr3) // ["т" "е" "ст"]
arr4 := strings.SplitN("тест", "", 0)
fmt.Printf("%v\n", arr4 == nil) // true
SplitAfter()
— возвращает строковый слайс с фрагментами изs
разделенныеsep
. Разделитель входит в состав фрагмента. Еслиsep
пустая строка, то возвращается слайс с символами Unicode. Формат функции:
strings.SplitAfter(s string, sep string) []string
Пример:
s := "word1;word2;;word3"
arr1 := strings.SplitAfter(s, ";")
fmt.Printf("%q\n", arr1) // ["word1;" "word2;" ";" "word3"]
arr2 := strings.SplitAfter("тест", "")
fmt.Printf("%q\n", arr2) // ["т" "е" "с" "т"]
SplitAfterN()
— аналогична функцииSplitAfter()
, но дополнительно позволяет указать максимальное число фрагментов. Формат функции:
strings.SplitAfterN(s string, sep string, n int) []string
Если n
больше нуля, то значение означает максимальное число фрагментов. Чтобы снять ограничение достаточно передать отрицательное значение. Если n
равно 0
, то возвращается значение nil
. Пример:
s := "word1;word2;;word3"
arr1 := strings.SplitAfterN(s, ";", 2)
fmt.Printf("%q\n", arr1) // ["word1;" "word2;;word3"]
arr2 := strings.SplitAfterN(s, ";", -1)
fmt.Printf("%q\n", arr2) // ["word1;" "word2;" ";" "word3"]
arr3 := strings.SplitAfterN("тест", "", 3)
fmt.Printf("%q\n", arr3) // ["т" "е" "ст"]
arr4 := strings.SplitAfterN("тест", "", 0)
fmt.Printf("%v\n", arr4 == nil) // true
Fields()
— возвращает строковый слайс с фрагментами, разделенными пробельными символами, изs
. Формат функции:
strings.Fields(s string) []string
Пример:
s := " word1, word2 \n\t\v word3 "
arr := strings.Fields(s)
fmt.Printf("%q\n", arr) // ["word1," "word2" "word3"]
FieldsFunc()
— возвращает строковый слайс с фрагментами изs
. Разделительные символы задаются с помощью функцииf
. Формат функции:
strings.FieldsFunc(s string, f func(rune) bool) []string
Пример:
// import "unicode"
s := " word1, word2 \n\t\v word3 "
arr := strings.FieldsFunc(s, func(r rune) bool {
return !unicode.IsLetter(r) && !unicode.IsNumber(r)
})
fmt.Printf("%q\n", arr) // ["word1" "word2" "word3"]
Примечание
Разделить строку на фрагменты по шаблону регулярного выражения позволяет метод
Split()
. Описание метода приведено в разд. 8.7.