ゼロサプレスとは
例えば“000012"
という文字列があったときに、頭についている余計な”0”
を取り除くこと
// ゼロサプレスの例
000012 → 12
001234 → 1234
000101 → 101
000110 → 110
最初にゼロサプレスをするために考えたこと
文字列を一つ一つ見ていって、0ではないものが出てきた時に別スライスにappendすればいいんじゃないか
before.go
package main
import (
"fmt"
"strings"
)
func zeroSuppress(str string) string {
slice := strings.Split(str, "")
res := make([]string, 0)
flag := false
for _, v := range slice {
if v != "0" {
flag = true // 0でないものが現れたら、flagをtrueにしてappendするようにした
}
if flag == true {
res = append(res, v)
}
}
return strings.Join(res, "")
}
func main() {
str1 := "000012"
str2 := "001020"
fmt.Println("str1: ", zeroSuppress(str1))
fmt.Println("str2: ", zeroSuppress(str2))
}
// > 12
// > 1020
ちょっと面倒?
goの標準パッケージにあった
調べるとすでに標準で入っているパッケージの中にちゃんとありました、、、
このメソッドの第二引数に"0"
を指定すれば、ゼロサプレスできそう
strings.TrimLeft()を使ってゼロサプレスする
上のプログラムをstrings.TrimLeft()
を用いて書くと
after.go
package main
import (
"fmt"
"strings"
)
func main() {
str1 := "000012"
str2 := "001020"
fmt.Println(strings.TrimLeft(str1, "0"))
fmt.Println(strings.TrimLeft(str2, "0"))
}
// > 12
// > 1020
と、すぐできた
まとめ
標準パッケージ便利、ちゃんと調べよう