String
概念
- 字符串是一个 字节的切片。可以理解为一些字节的集合,按照字符的形式来展示
- 也可理解为一个字符的序列,序列的意思是每个字符都有固定的位置(下标,索引,index:从0开始,到长度减1)
- 画外音:字符串本质上就是一个字节Slice,字符串中的每个字符在字节slice中都有顺序和位置
- len(string):不是指字符的个数,而是指字节的个数。英文字母占单字节,中文字符一般占3个字节
- Go中的字符串是Unicode兼容的,并且是UTF-8编码的
语法
- 用“”括起来
- 用``括起来
理解
-
因为Go中所有的字符都有对应的编码值,这些编码值是用UTF-8编码的unicode编码值
-
操作字符实际就是操作编码值
a='h' a=104 //转换成字符输出都是'h',
长度
-
len(string):不是指字符的个数,而是指字节的个数。英文字母占单字节,中文字符一般占3个字节
-
获取某个字节
s1 := "hello中国" //这是字符串对应着后台的字节slice //获取第一个字节,也就是获取后台字节slice的第一个字节 s1[0]
遍历字符串
str1 := "helloworld"
for i := 0 ;i<len(str1);i++{ //如果有中文字符会出现乱码
fmt.Printf("%c ",str1[i])
}
str2 := "helloworld中国"
for i,v := range str2{
fmt.Printf("%d %c
",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包
- 在go中,string被定义为基本数据类型
- 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进制的字符串表示