Функция bufio.ScanWords

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

Синтаксис

gobufio.ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error)

Пример

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

gopackage main

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

func main() {
  input := "The quick brown fox jumps over the lazy dog"
  scanner := bufio.NewScanner(strings.NewReader(input))
  scanner.Split(bufio.ScanWords)

  var words []string
  for scanner.Scan() {
    words = append(words, scanner.Text())
  }

  res := words
  fmt.Println(res)
}

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

go[The quick brown fox jumps over the lazy dog]

Пример

Давайте подсчитаем количество слов в тексте, используя bufio.ScanWords:

gopackage main

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

func main() {
  input := "Go is an open source programming language"
  scanner := bufio.NewScanner(strings.NewReader(input))
  scanner.Split(bufio.ScanWords)

  var count int
  for scanner.Scan() {
    count++
  }

  res := fmt.Sprintf("Word count: %d", count)
  fmt.Println(res)
}

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

go"Word count: 6"

Пример

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

gopackage main

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

func main() {
  input := "Hello world\nThis is Go\nbufio Scanner"
  scanner := bufio.NewScanner(strings.NewReader(input))
  scanner.Split(bufio.ScanWords)

  var result []string
  for scanner.Scan() {
    result = append(result, scanner.Text())
  }

  res := result
  fmt.Println(res)
}

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

go[Hello world This is Go bufio Scanner]

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

  • функцию bufio.Scanner.Split,
    которая устанавливает функцию разделения для сканера
  • функцию bufio.ScanLines,
    которая разбивает данные на строки
  • функцию bufio.ScanBytes,
    которая разбивает данные на отдельные байты
  • функцию bufio.Scanner.Text,
    которая возвращает текущий токен в виде строки