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,然后设置分隔符,接着扫描输入的文本,将每个单词输出到控制台,并在扫描结束后检查并输出可能发生的错误。
评论已关闭