Метод bufio.Scanner.Split
Метод bufio.Scanner.Split позволяет задать функцию разбиения,
которая определяет, как входные данные будут разделяться на токены
при сканировании. В качестве параметра метод принимает функцию
с сигнатурой func(data []byte, atEOF bool) (advance int, token []byte, err error).
По умолчанию сканер использует bufio.ScanLines для построчного
разбиения, но с помощью Split можно задать собственные правила
разделения данных.
Синтаксис
scanner.Split(splitFunc)
Пример
Давайте разобьем строку на слова с помощью встроенной функции bufio.ScanWords:
package 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())
}
}
Результат выполнения кода:
"abcde"
"12345"
"xyz"
Пример
Давайте используем bufio.ScanRunes для разбиения строки на отдельные руны:
package 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())
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте разобьем данные по байтам с помощью bufio.ScanBytes:
package 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())
}
}
Результат выполнения кода:
"1"
"2"
"3"
"4"
"5"
Смотрите также
-
метод
bufio.Scanner.Scan,
который выполняет сканирование следующего токена -
метод
bufio.Scanner.Text,
который возвращает текущий токен в виде строки -
функцию
bufio.ScanWords,
которая предоставляет встроенную функцию разбиения по словам -
функцию
bufio.ScanLines,
которая предоставляет встроенную функцию разбиения по строкам