Go语言基础学习六-字符串
大部分情况下,Go语言字符串的字节使用UTF-8编码(,世界文本文件编码标准一个英文字符表示一个字节,一个中文用三个字节表示)表示Unicode编码(可以表示成世界各种写作系统的字符),Go语言的字符串是一个用UTF-8编码的变宽字符序列,它的每一个字符由一个或多个字节表示。
字符串字面量使用双引号“和反引号来创建,双引号支持转义序列,反引号表示原生的字符串字面量,不支持任何转义序列。字符串可以直接相加和比较,这和java一样。
所有包含ASCLL(0-9十个数字,大小写英文字母,及专用符号)字符的字符串都可以使用切片操作:
s[n],s中第n位字符
s[n:m],从位置n到位置m-1处取得的字符串
s[:m],从索引位置为0到位置为m-1处取得的字符串
len(s),字符串s中的字节数
len([]rune(s)),字符串中的字符个数//注意与len(s)的区别
[]rune(s) ,将字符串s转换成一个Unicode码点(码点就是数字,用于表示字符的数字)
string (chars), 将一个[] rune或者[]int32转换成字符串。
[]byte(s),无副本地将s字符串转换成一个原始字节的切片数组,不保证转换的字节是合法的UTF-8编码字节。
string(bytes) ,无副本地将[]byte 或者[]unit8转换成字符串,不保证转换的字节是合法的UTF-8编码字节。
string(i),将任意数字类型的i转换成字符串,假设i是一个Unicode码点。如i是65,则返回”A”
一个单一的字符可以用单一的rune来表示。string(char)可以将一个字符转换成字符串。还可以准备好一个字符串切片,然后使用strings.Join()来将所有的字符串串连起来,还有一种方法就是使用bytes.Buffer(类似于Java的StringBuilder)例如:
var buffer bytes.Buffer
for{
if piece,ok := getNextValidString();ok{
buffer.WriteString(piece)
}else{
break;
}
}
fat.Print(buffer.String(),”\n”)
for index ,char:= range string也可以用于一个字符一个字符的迭代字符串每次迭代产生一个索引位置,和一个码点。strings.Index(s,”match”)获取字符串s中匹配match的第一个索引,strings.LastIndex(s,”match”)获取字符串s中匹配match的最后一个索引。
strings.IndexFunc(line,func(rune)bool),这个函数将字符串line中的每一个字符码点传入第二个参数函数中,当改函数处理这个字符且返回为true时则IndexFunc返回索引位置。
strings.Splite(s,”,”),以,为分隔符分割字符串,strings.Splite(s,”,”)同理但是保留分割符“,”,如果想按两个字符以上为分隔符,使用strings.FieldsFunc()函数:
strings.FiledsFunc(record,fun (char rune) bool{
switch char {
case ‘\t,’’*’,’|’:return true//以空格,*,|为分隔符分割
}
return false
})
strings.Replace(string,”\t”,” “ ,-1)将\t替换为“ ”-1 表示没有替换次数限制。
常用的一些字符串函数列表如下(除了string包还有strconv包,utf8包,unicode包,regexp包可以操作字符串):