Go String

String

概念

  1. 字符串是一个 字节的切片。可以理解为一些字节的集合,按照字符的形式来展示
  2. 也可理解为一个字符的序列,序列的意思是每个字符都有固定的位置(下标,索引,index:从0开始,到长度减1)
  3. 画外音:字符串本质上就是一个字节Slice,字符串中的每个字符在字节slice中都有顺序和位置
  4. len(string):不是指字符的个数,而是指字节的个数。英文字母占单字节,中文字符一般占3个字节
  5. Go中的字符串是Unicode兼容的,并且是UTF-8编码的

语法

  1. 用“”括起来
  2. 用``括起来

理解

  1. 因为Go中所有的字符都有对应的编码值,这些编码值是用UTF-8编码的unicode编码值

  2. 操作字符实际就是操作编码值

    a=\'h\'
    a=104
    //转换成字符输出都是\'h\',
    

长度

  1. len(string):不是指字符的个数,而是指字节的个数。英文字母占单字节,中文字符一般占3个字节

  2. 获取某个字节

    s1 := "hello中国" //这是字符串对应着后台的字节slice
    //获取第一个字节,也就是获取后台字节slice的第一个字节
    s1[0]
    

遍历字符串

str1 := "helloworld"
for i := 0 ;i<len(str1);i++{ //如果有中文字符会出现乱码
    fmt.Printf("%c\t",str1[i])
}

str2 := "helloworld中国"
for i,v := range str2{
    fmt.Printf("%d %c\n",i,v)
}

字符串是字节的集合

//字节切片->字符串
slice1 := []byte{65,66,67,68,69}
str3 := string(slice1)
fmt.Println(str3) //ABCDE

//字符串->字节切片
str4 := "abcde"
slice2 := []byte(str4)
fmt.Println(slice2) //[97 98 99 100 101]

字符串不能修改

str4[0]=\'f\' //报错 cannot assign to str4[0]
//不能通过修改切片的方式修改字符串

strings包

  1. 在go中,string被定义为基本数据类型
  2. strings包主要用来对采用utf-8编码的字符串实现一个操作
//返回的所有位置,都是byte的下标位置

func Contains(s, substr string) bool
//判断字符串s是否包含子串substr。

func ContainsAny(s, chars string) bool
//字符串chars中的只要有一个字符包含在字符串s中,就返回true

func Count(s, sep string) int
//统计字符串s中子串sep出现的次数

func HasSuffix(s, suffix string) bool
//判断s是否有后缀字符串suffix。

func HasPrefix(s, prefix string) bool
//判断s是否有前缀字符串prefix。

func Index(s, sep string) int
//字符c在s中第一次出现的位置,不存在则返回-1。

func IndexAny(s, chars string) int
//字符串s中,第一个出现在chars中的位置,如果不存在或者chars为空字符串则返回-1。

func IndexByte(s string, c byte) int
//字符c在s中第一次出现的位置,不存在则返回-1。

func LastIndex(s, sep string) int
//子串sep在字符串s中最后一次出现的位置,不存在则返回-1。

func Join(a []string, sep string) string
//将一系列字符串连接为一个字符串,之间用sep来分隔

func Split(s, sep string) []string
//用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。

func Repeat(s string, count int) string
//返回count个s串联的字符串。

func Replace(s, old, new string, n int) string
//返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。

func ToUpper(s string) string
//返回将所有字母都转为对应的大写版本的拷贝。

func ToLower(s string) string
//返回将所有字母都转为对应的小写版本的拷贝。

//截取字串 等同于slice操作 string[start:end]
str6 := "hello中国"
fmt.Println(str6[5:]) //中国

stringconv包

func Atoi(s string) (i int, err error)
//字符串->十进制数值
//Atoi是ParseInt(s, 10, 0)的简写。

func Itoa(i int) string
//十进制数值->字符串
//Itoa是FormatInt(i, 10) 的简写。

func ParseInt(s string, base int, bitSize int) (i int64, err error)
//字符串转数值
//base指定进制(2到36)bitSize
//bitSize 指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64

func FormatInt(i int64, base int) string
//返回i的base进制的字符串表示