Функция utf8.RuneCountInString
Функция utf8.RuneCountInString подсчитывает количество рун (Unicode code points) в строке UTF-8. В отличие от встроенной функции len, которая возвращает количество байт, utf8.RuneCountInString корректно учитывает многобайтовые символы, такие как эмодзи или иероглифы. Функция принимает один параметр — строку для подсчета, и возвращает целое число — количество рун в строке.
Синтаксис
utf8.RuneCountInString(str)
Пример ⁅n="sect"⁆
Давайте подсчитаем количество рун в строке "abcde":
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
res := utf8.RuneCountInString("abcde")
fmt.Println(res)
}
Результат выполнения кода:
5
Пример ⁅n="sect"⁆
Давайте подсчитаем количество рун в строке с многобайтовыми символами "Привет":
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
res := utf8.RuneCountInString("Привет")
fmt.Println(res)
}
Результат выполнения кода:
6
Пример ⁅n="sect"⁆
Давайте сравним результат utf8.RuneCountInString с встроенной функцией len для строки с эмодзи "Hello 😊":
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
str := "Hello 😊"
bytes := len(str)
runes := utf8.RuneCountInString(str)
fmt.Printf("bytes: %d, runes: %d", bytes, runes)
}
Результат выполнения кода:
"bytes: 9, runes: 7"
Пример ⁅n="sect"⁆
Давайте подсчитаем количество рун в пустой строке:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
res := utf8.RuneCountInString("")
fmt.Println(res)
}
Результат выполнения кода:
0
Смотрите также
-
функцию
utf8.RuneCount,
которая подсчитывает количество рун в срезе байт -
функцию
utf8.DecodeRuneInString,
которая декодирует первую руну из строки -
функцию
utf8.ValidString,
которая проверяет, является ли строка валидным UTF-8 -
функцию
utf8.RuneLen,
которая возвращает длину руны в байтах