Go中对string的七大操作 | Go主题月

557 阅读2分钟
  1. 求字符串长度

    len(str)

    package main
    
    import (
    	"fmt"
    )
    
    func main(){
    	str := "我爱我家"
    	//len(str) 打印字符串的长度(字节数)
    	fmt.Println(str,len(str))//每个中文汉字占3个字节
    }
    

    输出结果为:

    我爱我家 12
    
  2. 拼接字符串

    两种方式:

    (1)str1+str2

    (2) fmt.Sprinf(格式化样式,参数列表)

    格式化样式:字符串形式,格式化动词以%开头。

    参数列表:多个参数以逗号分隔,个数必须与格式化样式中的动词个数对应,否则报错。

    package main
    
    import (
    	"fmt"
    )
    
    func main(){
    
    	str := "我爱我家"
    
      //用‘+’方式拼接,直接打印到终端
    	str2 := "的狗"
    	str3 := str + str2
    	fmt.Println(str3)
    
    	//与‘+’拼接不同,fmt.Sprintf是将两个字符串拼接到一起,然后返回给一个字符串
    	str4 :="的猫"
    	str5 := fmt.Sprintf("%s%s",str,str4)//%s,以字符串形式返回
    	fmt.Println(str5)
    }
    

    输出结果:

    我爱我家的狗
    我爱我家的猫
    
    1. 分割字符串

    strings.Split(str,sep)

    str : 待分割的字符串

    sep : 分割符,字符串类型,需要用双引号

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main(){
    
    	str := "我爱我家"
      
    	//strings.Split分割字符串
    	ret := strings.Split(str,"我")//用“我”进行分割
    	fmt.Println(ret)
    }
    

    输出结果:

    [ 爱 家]
    
    4. 判断字符串中是否包含另一个字符串

    strings.Contains(s1,s2)

    s1中包含s2,则返回true,否则返回false

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main(){
    
    	str := "我爱我家"
    
    	//strings.Contains判断是否包含
    	fmt.Println(strings.Contains(str,"家"))
    }
    

    输出结果:

    true
    
    5. 前缀后缀判断

    (1)strings.HasPrefix(s1,s2)

    ​ 判断s1是否以s2为前缀开头

    (2)strings.HasSuffix(s1,s2)

    ​ 判断s1是否以s2为后缀结尾

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main(){
      
    	str := "我爱我家" 
      //判断前缀
    	fmt.Println(strings.HasPrefix(str,"我"))
    	//判断后缀
    	fmt.Println(strings.HasSuffix(str,"我"))
    }
    

    输出结果:

    true
    false
    
    6. 判断子串出现的位置

    (1)strings.index(s1,s2)

    返回s2子串在s1中第一次出现的位置,index从0开始

    (2) strings.Lastindex(s1,s2)

    返回s2子串在s1中最后一次出现的位置

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main(){
    	//判断子串出现的位置
    	str6 := "we will rock you"
    	fmt.Println(strings.Index(str6,"i"))
    	fmt.Println(strings.Index(str6,"l"))//默认返回找到的第一个
    	fmt.Println(strings.LastIndex(str6,"l"))
    }
    

    输出结果:

    4
    5
    6
    
    7. join操作

    join会先根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个一个字符串填入,在已有一个数组的情况下,这种效率会很高,但是本来没有,去构造这个数据的代价也不小.

    join与‘+’以及fmt.Sprintf()的性能对比,具体可以看:

    segmentfault.com/a/119000001…

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main(){
    
    	str := "我爱我家"
    	str6 := "we will rock you"
    
    	//string.Join,字符串拼接的又一种方式
    	str7 := strings.Join([]string{str,str6},",")
    	fmt.Println(str7)
    }
    

    输出结果:

    我爱我家,we will rock you