繁体   English   中英

带前导零的编号字符串到 Int

[英]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 函数)来解决这个问题,或者当变量有一个或多个前导零(例如0123400001 )时字符串到符文/字节对话(执行一些业务逻辑然后转换回来)是必要的.

更新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}

https://go.dev/play/p/etHtApYoWUi

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

https://pkg.go.dev/fmt#pkg-overview

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM