Golang text.scanner 包详解
text.Scanner
包是 Go 语言标准库中的一部分,它提供了一个简单的文本扫描器,可以用来扫描任何文本输入。以下是如何使用 text.Scanner
的一些基本示例。
导入 text.Scanner 包
在 Go 程序中,你需要先导入 text.Scanner
包,以便使用它提供的功能。
import (
"text/scanner"
)
创建一个新的 Scanner
你可以通过传入一个 io.Reader
来创建一个新的 text.Scanner
实例。
var s scanner.Scanner
s.Init(os.Stdin)
基本的扫描操作
Scanner
提供了几个方法来处理文本,如 Scan
、Text
、Pos
等。
Scan
方法用于扫描下一个标记,返回true
如果成功,false
如果到达输入的末尾。Text
方法返回当前标记的文本。Pos
方法返回当前标记的位置。
for s.Scan() {
// 处理标记
fmt.Println(s.Text())
}
// 扫描结束后,可能会有错误
if err := s.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
}
自定义分隔符
默认情况下,Scanner
使用空格、制表符、换行等作为分隔符,但你可以通过 Whitespace
和 Split
方法来自定义分隔符。
s.Whitespace = 1<<'\t' // 制表符是分隔符
s.Split(bufio.ScanWords) // 按单词分割
完整示例
以下是一个完整的示例,它定义了一个 Scanner
,扫描输入中的单词,并将它们转换为大写。
package main
import (
"fmt"
"os"
"text/scanner"
)
func main() {
var s scanner.Scanner
s.Init(os.Stdin)
s.Whitespace = 1<<' ' | 1<<'\t' | 1<<'\n' // 空格、制表符、换行是分隔符
s.Split(bufio.ScanWords) // 按单词分割
for s.Scan() {
fmt.Println(s.Text()) // 输出当前单词
}
if err := s.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
}
}
这个示例程序首先初始化一个 Scanner
,然后设置分隔符,接着扫描输入的文本,将每个单词输出到控制台,并在扫描结束后检查并输出可能发生的错误。
评论已关闭