Golang text.scanner 包详解
warning:
这篇文章距离上次修改已过429天,其中的内容可能已经有所变动。
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,然后设置分隔符,接着扫描输入的文本,将每个单词输出到控制台,并在扫描结束后检查并输出可能发生的错误。
评论已关闭