惯用方式在Go中连接前导零

时间:2019-09-06 19:57:45

标签: go idiomatic leading-zero

我想出了一种方法来将前导零填充到Go字符串中。我不确定这是否是您在Go中执行此操作的方式。 Go中有正确的方法吗?这是我想出的,可以在第二个if块中找到。我试过Google看看它是否内置了一些没有运气的东西。

func integerToStringOfFixedWidth(n int, w int) string {
  s := strconv.Itoa(n)
  l := len(s)

  if l < w {
    for i := l; i < w; i++ {
      s = "0" + s
    }
    return s
  }
  if l > w {
    return s[l-w:]
  }
  return s
}

对于n = 1234且w = 5,输出应为 integerToStringOfFixedWidth(n,w)=“ 01234”。

3 个答案:

答案 0 :(得分:5)

您可以为此使用Sprintf / Printf(使用具有相同格式的Sprintf打印到字符串):

package main

import (
    "fmt"
)

func main() {
    // For fixed width
    fmt.Printf("%05d", 4)

    // Or if you need variable widths:
    fmt.Printf("%0*d", 5, 1234)
}

https://golang.org/pkg/fmt/

  

请参阅文档中的其他标志-用前导零而不是空格填充

https://play.golang.org/p/0EM4aE2Hk6H

答案 1 :(得分:2)

您可以执行以下操作:

func integerToStringOfFixedWidth(n, w int) string {
    s := fmt.Sprintf(fmt.Sprintf("%%0%dd", w), n)
    l := len(s)
    if l > w {
        return s[l-w:]
    }
    return s
}

答案 2 :(得分:0)

使用记录良好且经过测试的软件包,而不要编写自己的paddig代码。使用github.com/keltia/leftpad的方法如下:

func integerToStringOfFixedWidth(n int, w int) string {
    s, _ := leftpad.PadChar(strconv.Itoa(n), w, '0')
    return s
}

Run this code on the Golang Playground