【问题标题】:Idiomatic way to Concat Leading Zeros in Go在 Go 中连接前导零的惯用方法
【发布时间】:2019-09-06 19:57:45
【问题描述】:

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

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"。

【问题讨论】:

标签: go idioms leading-zero


【解决方案1】:

您可以为此使用 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

【讨论】:

    【解决方案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
    }
    

    【讨论】:

    • 我本来想问上面的发帖人你怎么能把它退回来,现在我知道是怎么做到的了。
    • 也可以考虑fmt.Sprintf("%0*d", w, n),这要简单得多。
    【解决方案3】:

    使用有据可查且经过测试的包,而不是编写自己的 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!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多