gpt4 book ai didi

string - 拆分字符串并将子字符串转换为 Go 中的整数

转载 作者:IT王子 更新时间:2023-10-29 00:36:10 25 4
gpt4 key购买 nike

我有一个包含类似1,2,3 的变量。这实际上是三个值,我想在名为 v1v2v3 的三个变量中使用(但不是 在数组中)。

现在我正在通过以下方式进行此操作:

tmp := strings.Split(*w, ",")
sw, _ := strconv.Atoi(tmp[0])
rw, _ := strconv.Atoi(tmp[1])
pw, _ := strconv.Atoi(tmp[2])

这是有效的,尽管它非常重复并且在 Go 中感觉不正确。

解决这个问题的更简洁的方法是什么?

最佳答案

从具有特定格式的 string 中解析数据并将解析后的值存储到变量中是一项完美的任务,并且可以使用 fmt.Sscanf() 轻松完成。 :

src := "1,2,3"

var a, b, c int

parsed, err := fmt.Sscanf(src, "%d,%d,%d", &a, &b, &c)
fmt.Println(parsed, err, a, b, c)

输出(在 Go Playground 上尝试):

3 <nil> 1 2 3

严格控制

如前所述,这非常宽松,并且还将成功解析 "1,2,3,""1,2,3,4" 输入.这可能是也可能不是问题(取决于您的情况)。如果你想让它变得严格,你可以应用这个小技巧:

var temp int
parsed, err := fmt.Sscanf(src+",1", "%d,%d,%d,%d", &a, &b, &c, &temp)

我们所做的是附加一个与输入匹配的数字。如果原始输入不是以数字结尾(例如"1,2,3,"),解析将失败并返回非nil错误,以上示例给出:

3 expected integer 1 2 3

Go Playground 上试试.当然,它将继续解析“有效”输入而不会出现任何错误。

请注意,这仍然接受输入 "1,2,3,4"。我们可以将这个技巧“减少”到单个字符,我们不一定需要一个“目标”变量来存储它,它可能只是由格式字符串指定,就像这个例子:

parsed, err := fmt.Sscanf(src+"~", "%d,%d,%d~", &a, &b, &c)

我们在输入中附加了一个不太可能的特殊字符,并且我们希望格式字符串中有该特殊字符。尝试解析无效输入(例如 "1,2,3,""1,2,3,4")将导致错误,例如:

3 input does not match format 1 2 3

Go Playground 上试试.

关于string - 拆分字符串并将子字符串转换为 Go 中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com