Метод bufio.Scanner.Split

Метод bufio.Scanner.Split позволяет задать функцию разбиения, которая определяет, как входные данные будут разделяться на токены при сканировании. В качестве параметра метод принимает функцию с сигнатурой func(data []byte, atEOF bool) (advance int, token []byte, err error). По умолчанию сканер использует bufio.ScanLines для построчного разбиения, но с помощью Split можно задать собственные правила разделения данных.

Синтаксис

goscanner.Split(splitFunc)

Пример

Давайте разобьем строку на слова с помощью встроенной функции bufio.ScanWords:

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  text := "abcde 12345 xyz"
  scanner := bufio.NewScanner(strings.NewReader(text))
  scanner.Split(bufio.ScanWords)

  for scanner.Scan() {
    fmt.Println(scanner.Text())
  }
}

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

go"abcde"
"12345"
"xyz"

Пример

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

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  text := "abcde"
  scanner := bufio.NewScanner(strings.NewReader(text))
  scanner.Split(bufio.ScanRunes)

  for scanner.Scan() {
    fmt.Println(scanner.Text())
  }
}

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

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

Пример

Давайте разобьем данные по байтам с помощью bufio.ScanBytes:

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  text := "12345"
  scanner := bufio.NewScanner(strings.NewReader(text))
  scanner.Split(bufio.ScanBytes)

  for scanner.Scan() {
    fmt.Println(scanner.Text())
  }
}

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

go"1"
"2"
"3"
"4"
"5"

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

  • метод bufio.Scanner.Scan,
    который выполняет сканирование следующего токена
  • метод bufio.Scanner.Text,
    который возвращает текущий токен в виде строки
  • функцию bufio.ScanWords,
    которая предоставляет встроенную функцию разбиения по словам
  • функцию bufio.ScanLines,
    которая предоставляет встроенную функцию разбиения по строкам