cpp

Байтовые слайсы. Разбиение на фрагменты по разделителю

Выполнить разбиение на фрагменты по разделителю позволяют следующие функции:

  • Split() — возвращает двумерный байтовый слайс с фрагментами из s разделенные sep. Если слайс sep пустой, то возвращается двумерный слайс с символами Unicode. Формат функции:
bytes.Split(s []byte, sep []byte) [][]byte

Пример:

arr := []byte("word1;word2;;word3")
arr2 := bytes.Split(arr, []byte(";"))
fmt.Printf("%q\n", arr2) // ["word1" "word2" "" "word3"]
arr3 := bytes.Split([]byte("тест"), []byte(""))
fmt.Printf("%q", arr3)   // ["т" "е" "с" "т"]
  • SplitN() — аналогична функции Split(), но дополнительно позволяет указать максимальное число фрагментов. Формат функции:
bytes.SplitN(s []byte, sep []byte, n int) [][]byte

Если n больше нуля, то значение означает максимальное число фрагментов. Чтобы снять ограничение достаточно передать отрицательное значение. Если n равно 0, то возвращается значение nil. Пример:

arr := []byte("word1;word2;;word3")
arr2 := bytes.SplitN(arr, []byte(";"), 2)
fmt.Printf("%q\n", arr2) // ["word1" "word2;;word3"]
arr3 := bytes.SplitN(arr, []byte(";"), -1)
fmt.Printf("%q\n", arr3) // ["word1" "word2" "" "word3"]
arr4 := bytes.SplitN([]byte("тест"), []byte(""), 3)
fmt.Printf("%q\n", arr4) // ["т" "е" "ст"]
arr5 := bytes.SplitN([]byte("тест"), []byte(""), 0)
fmt.Printf("%v\n", arr5 == nil) // true
  • SplitAfter() — возвращает двумерный байтовый слайс с фрагментами из s разделенные sep. Разделитель входит в состав фрагмента. Если слайс sep пустой, то возвращается двумерный слайс с символами Unicode. Формат функции:
bytes.SplitAfter(s []byte, sep []byte) [][]byte

Пример:

arr := []byte("word1;word2;;word3")
arr2 := bytes.SplitAfter(arr, []byte(";"))
fmt.Printf("%q\n", arr2) // ["word1;" "word2;" ";" "word3"]
arr3 := bytes.SplitAfter([]byte("тест"), []byte(""))
fmt.Printf("%q", arr3) // ["т" "е" "с" "т"]
  • SplitAfterN() — аналогична функции SplitAfter(), но дополнительно позволяет указать максимальное число фрагментов. Формат функции:
bytes.SplitAfterN(s []byte, sep []byte, n int) [][]byte

Если n больше нуля, то значение означает максимальное число фрагментов. Чтобы снять ограничение достаточно передать отрицательное значение. Если n равно 0, то возвращается значение nil. Пример:

arr := []byte("word1;word2;;word3")
arr2 := bytes.SplitAfterN(arr, []byte(";"), 2)
fmt.Printf("%q\n", arr2) // ["word1;" "word2;;word3"]
arr3 := bytes.SplitAfterN(arr, []byte(";"), -1)
fmt.Printf("%q\n", arr3) // ["word1;" "word2;" ";" "word3"]
arr4 := bytes.SplitAfterN([]byte("тест"), []byte(""), 3)
fmt.Printf("%q\n", arr4) // ["т" "е" "ст"]
arr5 := bytes.SplitAfterN([]byte("тест"), []byte(""), 0)
fmt.Printf("%v\n", arr5 == nil) // true
  • Fields() — возвращает двумерный байтовый слайс с фрагментами, разделенными пробельными символами, из слайса s. Формат функции:
bytes.Fields(s []byte) [][]byte

Пример:

arr := []byte("   word1, word2 \n\t\v word3   ")
arr2 := bytes.Fields(arr)
fmt.Printf("%q\n", arr2) // ["word1," "word2" "word3"]
  • FieldsFunc() — возвращает двумерный байтовый слайс с фрагментами из слайса s. Разделительные символы задаются с помощью функции f. Формат функции:
bytes.FieldsFunc(s []byte, f func(r rune) bool) [][]byte

Пример:

// import "unicode"
arr := []byte("   word1, word2 \n\t\v word3   ")
arr2 := bytes.FieldsFunc(arr, func(r rune) bool {
   return !unicode.IsLetter(r) && !unicode.IsNumber(r)
})
fmt.Printf("%q\n", arr2) // ["word1" "word2" "word3"]

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

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp