Функция strings.IndexFunc

Функция strings.IndexFunc возвращает индекс первого символа в строке, для которого переданная пользовательская функция возвращает true. Первый параметр функции принимает строку для поиска, второй параметр принимает функцию, которая проверяет каждый символ и возвращает bool. Если подходящий символ не найден, функция возвращает -1.

Синтаксис

gostrings.IndexFunc(str, func(r rune) bool)

Пример

Давайте найдем индекс первого символа в строке "abcde", который является гласной буквой:

gopackage main

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

func main() {
  isVowel := func(r rune) bool {
    return r == 'a' || r == 'e' || r == 'i' || r == 'o' || r == 'u'
  }
  res := strings.IndexFunc("abcde", isVowel)
  fmt.Println(res)
}

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

go0

В строке "abcde" первый символ 'a' является гласной, поэтому функция возвращает индекс 0.

Пример

Теперь найдем индекс первого символа в строке "abcde", который является цифрой:

gopackage main

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

func main() {
  res := strings.IndexFunc("abcde", unicode.IsDigit)
  fmt.Println(res)
}

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

go-1

В строке "abcde" нет цифр, поэтому функция возвращает -1.

Пример

Найдем индекс первого символа в строке "12345", который не является цифрой:

gopackage main

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

func main() {
  isNotDigit := func(r rune) bool {
    return !unicode.IsDigit(r)
  }
  res := strings.IndexFunc("12345", isNotDigit)
  fmt.Println(res)
}

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

go-1

Все символы в строке "12345" являются цифрами, поэтому функция возвращает -1.

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

  • функцию strings.LastIndexFunc,
    которая ищет индекс последнего символа по функции
  • функцию strings.Index,
    которая возвращает позицию первого вхождения подстроки
  • функцию strings.IndexAny,
    которая ищет первый символ из набора
  • функцию strings.Contains,
    которая проверяет наличие подстроки в строке