РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
715 of 1593 menu

Функция bufio.ScanRunes

Функция bufio.ScanRunes является функцией разделения (split function) для bufio.Scanner. Она определяет правило, по которому сканер будет разбивать входные данные на токены. В отличие от ScanLines или ScanWords, эта функция разбивает данные по рунам (Unicode code points), возвращая каждый символ как отдельный токен.

Функция не принимает параметров и используется исключительно в качестве значения для метода Split сканера.

Синтаксис

scanner.Split(bufio.ScanRunes)

Пример использования

Давайте прочитаем строку "Hello, 世界" по рунам с помощью bufio.ScanRunes:

package main import ( "bufio" "fmt" "strings" ) func main() { data := "Hello, 世界" scanner := bufio.NewScanner(strings.NewReader(data)) scanner.Split(bufio.ScanRunes) for scanner.Scan() { token := scanner.Text() fmt.Printf("%q ", token) } }

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

"H" "e" "l" "l" "o" "," " " "世" "界"

Пример с обработкой ошибок

При работе со сканером важно проверять наличие ошибок после завершения цикла. Рассмотрим пример:

package main import ( "bufio" "fmt" "strings" ) func main() { data := "abcde" scanner := bufio.NewScanner(strings.NewReader(data)) scanner.Split(bufio.ScanRunes) for scanner.Scan() { token := scanner.Text() fmt.Println(token) } if err := scanner.Err(); err != nil { fmt.Printf("Error: %v\n", err) } }

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

"a" "b" "c" "d" "e"

Пример с многобайтовыми символами

Функция корректно обрабатывает многобайтовые символы Unicode, такие как эмодзи или иероглифы. Давайте посмотрим на примере:

package main import ( "bufio" "fmt" "strings" ) func main() { data := "🚀🌟⭐" scanner := bufio.NewScanner(strings.NewReader(data)) scanner.Split(bufio.ScanRunes) var tokens []string for scanner.Scan() { tokens = append(tokens, scanner.Text()) } fmt.Printf("Runes: %v\n", tokens) fmt.Printf("Count: %d\n", len(tokens)) }

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

"Runes: [🚀 🌟 ⭐]" "Count: 3"

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

  • функцию bufio.ScanLines,
    которая разбивает данные на строки
  • функцию bufio.ScanWords,
    которая разбивает данные на слова
  • функцию bufio.ScanBytes,
    которая разбивает данные на байты
  • метод bufio.Scanner.Split,
    который устанавливает функцию разделения для сканера
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить