Функция utf8.RuneCountInString

Функция utf8.RuneCountInString подсчитывает количество рун (Unicode code points) в строке UTF-8. В отличие от встроенной функции len, которая возвращает количество байт, utf8.RuneCountInString корректно учитывает многобайтовые символы, такие как эмодзи или иероглифы. Функция принимает один параметр — строку для подсчета, и возвращает целое число — количество рун в строке.

Синтаксис

goutf8.RuneCountInString(str)

Пример ⁅n="sect"⁆

Давайте подсчитаем количество рун в строке "abcde":

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  res := utf8.RuneCountInString("abcde")
  fmt.Println(res)
}

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

go5

Пример ⁅n="sect"⁆

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

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  res := utf8.RuneCountInString("Привет")
  fmt.Println(res)
}

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

go6

Пример ⁅n="sect"⁆

Давайте сравним результат utf8.RuneCountInString с встроенной функцией len для строки с эмодзи "Hello 😊":

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  str := "Hello 😊"
  bytes := len(str)
  runes := utf8.RuneCountInString(str)
  fmt.Printf("bytes: %d, runes: %d", bytes, runes)
}

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

go"bytes: 9, runes: 7"

Пример ⁅n="sect"⁆

Давайте подсчитаем количество рун в пустой строке:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  res := utf8.RuneCountInString("")
  fmt.Println(res)
}

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

go0

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

  • функцию utf8.RuneCount,
    которая подсчитывает количество рун в срезе байт
  • функцию utf8.DecodeRuneInString,
    которая декодирует первую руну из строки
  • функцию utf8.ValidString,
    которая проверяет, является ли строка валидным UTF-8
  • функцию utf8.RuneLen,
    которая возвращает длину руны в байтах