Go学习之字符串
strings库
自己常用的一些函数
转大写
strings.ToUpper(s string)
返回string
替换
strings.Replace(s, old, new string, n int)
返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
字符串拼接
参考:https://www.bilibili.com/read/cv8981400/
加号拼接
这个过于简单了,就是+,不过字符串是不可变的类型,因此对效率有影响。
sprintf函数
s1 := "hello"
s2 := "word"
s3 := fmt.Sprintf("%s%s", s1, s2) //s3 = "helloword"
这样写的好处就是不会直接产生临时字符串,但是效率好像也是不是特别高。
Join函数
需要使用strings库,Join函数会先根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个一个字符串填入,在已有一个数组的情况下,这种效率会很高,如果没有的话效率也不高。
s1 := "hello"
s2 := "word"
var str []string = []string{s1, s2}
s3 := strings.Join(str, "")
fmt.Print(s3)
buffer.WriteString函数
//需要先导入bytes包
s1 := "字符串"
s2 := "拼接"
//定义Buffer类型
var bt bytes.Buffer
向bt中写入字符串
bt.WriteString(s1)
bt.WriteString(s2)
//获得拼接后的字符串
s3 := bt.String()
这个比较理想,可以当成可变字符使用,对内存的增长也有优化,如果能预估字符串的长度,还可以用 buffer.Grow() 接口来设置 capacity
buffer.Builder函数
//需要先导入Strings包
s1 := "字符串"
s2 := "拼接"
var build strings.Builder
build.WriteString(s1)
build.WriteString(s2)
s3 := build.String()
官方建议用这个,使用方法和上面基本一样。
字符串截取
内置的切片
按字节截取,在处理 ASCII 单字节字符串时非常方便。
s := "abcdef"
fmt.Println(s[1:4])
[]rune
如果是中文或者多字节的字符,就需要用到rune,将字符串转换为 []rune,然后按切片语法截取,再把结果转成字符串。
s := "Go 语言"
rs := []rune(s)
fmt.Println(strings(rs[1:4]))
如果想要更加进一步多字节字符的截取效率,可以参考脚本之家的这篇文章。
U1S1,我发现脚本之家的文章质量都不错,要么比较深度,要么比较多样。
int转字符串
- string转成int:
- int, err := strconv.Atoi(string)
- string转成int64:
- int64, err := strconv.ParseInt(string, 10, 64)
- int转成string:
- string := strconv.Itoa(int)
- int64转成string:
- string := strconv.FormatInt(int64,10)



