去掉Golang中的零值

零抑制是什么意思?

在一个字符串中,例如存在”000012″,需要去除开头多余的”0″。

// ゼロサプレスの例
000012 → 12
001234 → 1234
000101 → 101
000110 → 110

最初想要进行零度压缩的想法

逐个检查字符序列,当遇到非零元素时,将其加入到另一个切片中,这样行不行呢?

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()函数来编写上述程序。

将上述程序用strings.TrimLeft()函数进行修改。

用strings.TrimLeft()函数改写上面的程序。

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

然后,马上完成了

总结

標準套餐非常方便,該好好調查一下。

广告
将在 10 秒后关闭
bannerAds