使用 fmt.Sscanf 函数从字符串中读取格式化的数据

在 Go 语言中,fmt 包中的 Sscanf 函数可以非常方便地从一个字符串中读取格式化的数据,并将其赋值给变量。这个函数能够解析字符串中的数据,根据指定的格式将数据转换为相应的类型,并将转换后的结果存储到指定的变量中。

函数语法

go 复制
1
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
  • str:要解析的字符串。
  • format:指定的格式。
  • a:待赋值的变量列表。
  • n:成功赋值的变量个数。
  • err:错误描述。

代码示例

下面通过一些代码示例来加深对 fmt.Sscanf 函数的理解。

示例 1:解析字符串中的整数

go 复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package main

import (
    "fmt"
)

func main() {
    str := "I have 10 apples"
    var apples int

    n, err := fmt.Sscanf(str, "I have %d apples", &apples)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    fmt.Println("解析成功,变量apples的值为:", apples)
    fmt.Println("成功赋值的变量个数:", n)
}

输出结果:

text 复制
1 2
解析成功,变量apples的值为: 10
成功赋值的变量个数: 1

在上述示例中,我们通过 fmt.Sscanf 函数解析了字符串 "I have 10 apples",并提取出其中的整数 10,将其赋值给变量 apples。

示例 2:解析字符串中的多个值

go 复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
package main

import (
    "fmt"
)

func main() {
    str := "I am 20 years old"
    var name string
    var age int

    n, err := fmt.Sscanf(str, "I am %s years old", &name, &age)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    fmt.Println("解析成功,变量name的值为:", name)
    fmt.Println("解析成功,变量age的值为:", age)
    fmt.Println("成功赋值的变量个数:", n)
}

输出结果:

text 复制
1 2 3
解析成功,变量name的值为: 20
解析成功,变量age的值为: 0
成功赋值的变量个数: 1

在示例 2 中,我们从字符串 "I am 20 years old" 中解析出 name 和 age 的值。尽管我们在格式化字符串中指定了两个变量,但由于 "20" 被解析为了字符串类型的 name,而非整数类型的 age,所以 age 的值为 0。

描述