cpp

Разбиение на фрагменты по разделителю

Выполнить разбиение на фрагменты по разделителю позволяют следующие функции из пакета 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"]
Примечание

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF