当前位置:   article > 正文

Golang基础教程——字符串常用方法总结_golang字符串

golang字符串

目录

string包

字符串比较

字符串查找

字符串重复

字符串替换

字符串删除

字符串大小写转换

字符串前缀后缀

字符串分割

字符串拼接

strconv

string包

字符串比较

函数接口

  1. // Compare比较字符串的速度比字符串内建的比较要快
  2. func Compare(a, b string) int

示例代码

  1. fmt.Println(strings.Compare(string("hello"), string("haha"))) // 1
  2. fmt.Println(strings.Compare(string("hello"), string("world"))) // -1
  3. fmt.Println(strings.Compare(string("hello"), string("helloworld"))) // -1
  4. fmt.Println(strings.Compare(string("hello"), string("hello"))) //0

字符串查找

函数接口

  1. // 判断给定字符串s中是否包含子串substr, 找到返回true, 找不到返回false
  2. func Contains(s, substr string) bool
  3. // 在字符串s中查找sep所在的位置, 返回位置值, 找不到返回-1
  4. func Index(s, sep string) int
  5. // 统计给定子串sep的出现次数, sep为空时, 返回1 + 字符串的长度
  6. func Count(s, sep string) int

示例代码

  1. fmt.Println(strings.Contains("seafood", "foo")) // true
  2. fmt.Println(strings.Contains("seafood", "bar")) // false
  3. fmt.Println(strings.Contains("seafood", "")) // true
  4. fmt.Println(strings.Contains("", "")) // true
  5. fmt.Println(strings.Index("chicken", "ken")) // 4
  6. fmt.Println(strings.Index("chicken", "dmr")) // -1
  7. fmt.Println(strings.Count("cheeseeee", "ee")) // 3
  8. fmt.Println(strings.Count("five", "")) // 5

字符串重复

函数接口

  1. // 重复s字符串count次, 最后返回新生成的重复的字符串
  2. func Repeat(s string, count int) string

示例代码

fmt.Println("ba" + strings.Repeat("na", 2))  // banana

字符串替换

函数接口

  1. // 在s字符串中, 把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换
  2. func Replace(s, old, new string, n int) string

示例代码

  1. fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // oinky oinky oink
  2. fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) // moo moo moo

字符串删除

函数接口

  1. // 删除在s字符串的头部和尾部中由cutset指定的字符, 并返回删除后的字符串
  2. func Trim(s string, cutset string) string
  3. // 删除首尾的空格
  4. func TrimSpace(s string) string
  5. // 删除首部和尾部的 ! 和空格

示例代码

  1. fmt.Printf("%q\n", strings.Trim(" !!! Achtung! Achtung! !!! ", "! ")) // "Achtung! Achtung"
  2. fmt.Printf("%q\n", strings.TrimSpace(" \t\n a lone gopher \n\t\r\n")) // "a lone gopher"

字符串大小写转换

函数接口

  1. // 给定字符串转换为英文标题的首字母大写的格式(不能正确处理unicode标点)
  2. func Title(s string) string
  3. // 所有字母转换为小写
  4. func ToLower(s string) string
  5. // 所有字母转换为大写
  6. func ToUpper(s string) string

示例代码

  1. fmt.Println(strings.Title("her royal highness")) // Her Royal Highness
  2. fmt.Println(strings.ToLower("Gopher123")) // gopher123
  3. fmt.Println(strings.ToUpper("Gopher")) // GOPHER

字符串前缀后缀

函数接口

  1. // 判断字符串是否包含前缀prefix
  2. func HasPrefix(s, prefix string) bool
  3. // 判断字符串是否包含后缀suffix,
  4. func HasSuffix(s, suffix string) bool

示例代码

  1. fmt.Println(strings.HasPrefix("Gopher", "Go")) // true
  2. fmt.Println(strings.HasPrefix("Gopher", "go")) // false
  3. fmt.Println(strings.HasPrefix("Gopher", "C")) // false
  4. fmt.Println(strings.HasPrefix("Gopher", "")) // true
  5. fmt.Println(strings.HasSuffix("Amigo", "go")) // true
  6. fmt.Println(strings.HasSuffix("Amigo", "O")) // false
  7. fmt.Println(strings.HasSuffix("Amigo", "Ami")) // false
  8. fmt.Println(strings.HasSuffix("Amigo", "")) // true

字符串分割

函数接口

  1. // 把字符串按照sep进行分割, 返回slice(类似于python中的split)
  2. func Split(s, sep string) []string
  3. // 去除字符串s中的空格符, 并按照空格(可以是一个或者多个空格)分割字符串, 返回slice
  4. func Fields(s string) []string
  5. // 当字符串中字符c满足函数f(c)时, 就进行字符串s的分割
  6. func FieldsFunc(s string, f func(rune) bool) []string

示例代码

  1. fmt.Printf("%q\n", strings.Split("a,b,c", ",")) // ["a" "b" "c"]
  2. fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) // ["" "man " "plan " "canal panama"]
  3. fmt.Printf("%q\n", strings.Split(" xyz ", "")) // [" " "x" "y" "z" " "]
  4. fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins")) // [""]
  5. fmt.Printf("%q\n", strings.Split("1 og.txt", " "))
  6. fmt.Printf("Fields are: %q\n", strings.Fields(" foo bar baz ")) // Fields are: ["foo" "bar" "baz"]
  7. f := func(c rune) bool {
  8. return unicode.IsLetter(c) && !unicode.IsNumber(c)
  9. }
  10. // 表示按照非字母, 非数字来分割字符串
  11. fmt.Printf("Fields are: %q\n", strings.FieldsFunc(" foo1;bar2,baz3...", f)) // Fields are: ["foo1" "bar2" "baz3"]

字符串拼接

三种拼接方案:

  • 直接用+=操作符, 直接将多个字符串拼接. 最直观的方法, 不过当数据量非常大时用这种拼接访求是非常低效的.
  • 用字符串切片([]string)装载所有要拼接的字符串,最后使用strings.Join()函数一次性将所有字符串拼接起来。在数据量非常大时,这种方法的效率也还可以的。
  • 利用Buffer(Buffer是一个实现了读写方法的可变大小的字节缓冲),将所有的字符串都写入到一个Buffer变量中,最后再统一输出.

函数接口

  1. // bytes.Buffer的方法, 将给定字符串追加(append)到Buffer
  2. func (b *Buffer) WriteString(s string) (n int, err error)
  3. // 字符串拼接, 把slice通过给定的sep连接成一个字符串
  4. func Join(a []string, sep string) string

三种字符串拼接方式的性能测试(出自参考链接的文章)

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "strings"
  6. "time"
  7. )
  8. func main() {
  9. var buffer bytes.Buffer
  10. s := time.Now()
  11. for i := 0; i < 100000; i++ {
  12. buffer.WriteString("test is here\n")
  13. }
  14. buffer.String() // 拼接结果
  15. e := time.Now()
  16. fmt.Println("taked time is ", e.Sub(s).Seconds())
  17. s = time.Now()
  18. str := ""
  19. for i := 0; i < 100000; i++ {
  20. str += "test is here\n"
  21. }
  22. e = time.Now()
  23. fmt.Println("taked time is ", e.Sub(s).Seconds())
  24. s = time.Now()
  25. var sl []string
  26. for i := 0; i < 100000; i++ {
  27. sl = append(sl, "test is here\n")
  28. }
  29. strings.Join(sl, "")
  30. e = time.Now()
  31. fmt.Println("taked time is", e.Sub(s).Seconds())
  32. }

运行结果如下

  1. taked time is 0.004145088
  2. taked time is 13.78821647
  3. taked time is 0.024005696

strconv包

字符串转换

字符串转化的函数在strconv中

  • Append*函数表示将给定的类型(如bool, int等)转换为字符串后, 添加在现有的字节数组中[]byte
  • Format*函数将给定的类型变量转换为string返回
  • Parse*函数将字符串转换为其他类型

函数接口

  1. // 字符串转整数
  2. func Atoi(s string) (i int, err error)
  3. // 整数值换字符串
  4. func Itoa(i int) string

示例代码

  1. str := make([]byte, 0, 100)
  2. str = strconv.AppendInt(str, 123, 10) // 10用来表示进制, 此处为10进制
  3. str = strconv.AppendBool(str, false)
  4. str = strconv.AppendQuote(str, "andrew")
  5. str = strconv.AppendQuoteRune(str, '刘')
  6. fmt.Println(string(str)) // 123false"andrew"'刘'
  7. s := strconv.FormatBool(true)
  8. fmt.Printf("%T, %v\n", s, s) // string, true
  9. v := 3.1415926535
  10. s32 := strconv.FormatFloat(v, 'E', -1, 32)
  11. fmt.Printf("%T, %v\n", s32, s32) // string, 3.1415927E+00
  12. s10 := strconv.FormatInt(-44, 10)
  13. fmt.Printf("%T, %v\n", s10, s10) // string, -44
  14. num := strconv.Itoa(1234)
  15. fmt.Printf("%T, %v\n", s, s) // int, 1023
  16. fmt.Printf("%T, %v\n", num, num) // string, 1234

(1)int转string

  1. s := strconv.Itoa(i)
  2. //等价于s := strconv.FormatInt(int64(i), 10)

(2)int64转string

  1. i := int64(123)
  2. s := strconv.FormatInt(i, 10)

第二个参数为基数,可选2~36

注:对于无符号整形,可以使用FormatUint(i uint64, base int)

(3)string转int

i, err := strconv.Atoi(s)

(4)string转int64

i, err := strconv.ParseInt(s, 10, 64)

第二个参数为基数(2~36),第三个参数位大小表示期望转换的结果类型,其值可以为0, 8, 16, 32和64,分别对应 int, int8, int16, int32和int64

(5)float相关

float转string:

  1. v := 3.1415926535
  2. s1 := strconv.FormatFloat(v, 'E', -1, 32)//float32s2 := strconv.FormatFloat(v, 'E', -1, 64)//float64

string转float:

  1. s := "3.1415926535"
  2. v1, err := strconv.ParseFloat(v, 32)
  3. v2, err := strconv.ParseFloat(v, 64)

PS:go语言string、int、int64互相转换

  1. //string到int
  2. int,_:=strconv.Atoi("123")
  3. fmt.Printf("type:%T;值:%v",int,int)
  4. fmt.Println()
  5. //string到int64
  6. int64, _ := strconv.ParseInt("456", 10, 64)
  7. fmt.Printf("type:%T;值:%v",int64,int64)
  8. fmt.Println()
  9. //int到string
  10. string:=strconv.Itoa(int)
  11. fmt.Printf("type:%T;值:%v",string,string)
  12. fmt.Println()
  13. //int64string
  14. str10:=strconv.FormatInt(160,10)
  15. fmt.Printf("type:%T;值:%v",str10,str10)
  16. fmt.Println()
  17. //string到float32(float64)
  18. float,_ := strconv.ParseFloat("165.34",32/64)
  19. fmt.Printf("type:%T;值:%v",float,float)
  20. fmt.Println()
  21. //float到string
  22. fts32 := strconv.FormatFloat(3.1415926, 'e', -1, 32)
  23. fts64 := strconv.FormatFloat(3.1415926, 'E', -1, 64)
  24. fmt.Printf("type:%T;值:%v",fts32,fts32)
  25. fmt.Println()
  26. fmt.Printf("type:%T;值:%v",fts64,fts64)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/994704
推荐阅读
相关标签
  

闽ICP备14008679号