[英]Numbered String to Int with leading zeros
对于编号字符串( 1234
),我通常使用 package strconv
和 function Atoi
在 Z5F075AE3E1F9D0382BB8C4632991F9 中从字符串转换为 int 但是,如果编号字符串以前导零开头(例如01234
),解决此问题的惯用方法是什么?
切片字符串然后将[]string
转换为[]int
是一种方法,但它是最好/惯用的方法吗?
更新 1:从输入字符串01234
,预期 output 01234
为任何类型的 int(在任何类型的简单或组合类型的 int 中,例如foo:= "01234"
到bar = []int{0, 1, 2, 3, 4}
)。
是否有惯用的(或标准的 package 函数)来解决这个问题,或者当变量有一个或多个前导零(例如01234
或00001
)时字符串到符文/字节对话(执行一些业务逻辑然后转换回来)是必要的.
更新2:只是为了完全清楚,因为我觉得这个问题可以在未来得到澄清: foo, _:= strconv.Atoi("01234")
返回1234
作为int
(并且可以通过其他方式获得相同的结果strings
package 等)。
这里的问题是,我如何(如果可能,在 Go 惯用语中)得到带有前导零的结果,即int
类型的01234
(而不是1234
)?
使用strings.TrimLeft(s, "0")
从字符串中删除前导零。
要将十进制字符串转换为这些十进制值的整数切片,请遍历字符串并使用减法将符文转换为相应的 integer:
func toIntSlice(s string) ([]int, error) {
var result []int
for _, r := range s {
if r < '0' || r > '9' {
return nil, fmt.Errorf("not an integer %s", s)
}
result = append(result, int(r-'0'))
}
return result, nil
}
示例使用:
foo := "01234"
bar, _ := toIntSlice(foo)
// bar is []int{0, 1, 2, 3, 4}
fmt.Printf("%01d ", 5) // 5
fmt.Printf("%02d ", 5) // 05
fmt.Printf("%03d ", 5) // 005
fmt.Printf("%04d ", 5) // 0005
myInt := fmt.Sprintf("%05d ", 5)
fmt.Println(myInt) // 00005
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.