Функция strings.FieldsFunc

Функция strings.FieldsFunc разбивает строку на части (поля), используя пользовательскую функцию для определения символов-разделителей. В первый параметр мы передаем исходную строку для разбиения, во второй параметр мы передаем функцию, которая принимает руну и возвращает true, если этот символ должен считаться разделителем. Функция возвращает срез строк ([]string), содержащий полученные поля. Важно: последовательные разделители игнорируются, а пустые поля не включаются в результат.

Синтаксис

gostrings.FieldsFunc(str string, f func(rune) bool) []string

Пример

Давайте разобьем строку "abcde" по символам 'b' и 'd':

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  isSeparator := func(r rune) bool {
    return r == 'b' || r == 'd'
  }

  res := strings.FieldsFunc("abcde", isSeparator)
  fmt.Println(res)
}

Результат выполнения кода:

go[a c e]

Пример

Давайте разобьем строку по нескольким символам-разделителям одновременно:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  isSeparator := func(r rune) bool {
    return r == ' ' || r == ',' || r == ';'
  }

  res := strings.FieldsFunc("a,b c;d e,f", isSeparator)
  fmt.Println(res)
}

Результат выполнения кода:

go[a b c d e f]

Пример

Давайте разобьем строку по цифрам, используя функцию unicode.IsDigit:

gopackage main

import (
  "fmt"
  "strings"
  "unicode"
)

func main() {
  isDigit := func(r rune) bool {
    return unicode.IsDigit(r)
  }

  res := strings.FieldsFunc("ab12cd34ef", isDigit)
  fmt.Println(res)
}

Результат выполнения кода:

go[ab cd ef]

Пример

Давайте разобьем строку по символам, не являющимся буквами:

gopackage main

import (
  "fmt"
  "strings"
  "unicode"
)

func main() {
  isNotLetter := func(r rune) bool {
    return !unicode.IsLetter(r)
  }

  res := strings.FieldsFunc("hello,world!123", isNotLetter)
  fmt.Println(res)
}

Результат выполнения кода:

go[hello world]

Смотрите также

  • функцию strings.Fields,
    которая разбивает строку по пробельным символам
  • функцию strings.Split,
    которая разбивает строку по указанной подстроке
  • функцию strings.IndexFunc,
    которая ищет позицию первого символа, удовлетворяющего условию
  • функцию strings.TrimFunc,
    которая удаляет символы с обоих концов строки по условию