字符串是utf-8字符的一个序列,当字符为ascii码时占用1个字节,其他字符则根据需要占用2-4个字节。
go中字符串和c++、java、python不同(java始终占用2个字节),而同时根据需要占用1-4个字节。
字符串是值类型,且值不可变,就是创建完某个文本后你无法再次修改这个文本的内容。
字符串中的某个字符元素可以通过索引获取,如下:
字符串str的第一个元素:str[0]
第i个元素:str[i-1]
最后一个元素:str[len(str)-1]
注:获取字符串某个元素的地址这种操作是非法的,如:&str[i]
字符串的各种操作:
1、判断前后缀
strings.HasPrefix(s,prefix string) bool
strings.HasSuffix(s,suffix string) bool
2、字符串包含
strings.Contains(s, substr string) bool
3、判断子字符串或字符在父字符串中出现的位置(索引)
strings.Index(s,str string) int 返回字符串str在字符串s中首次出现位置的索引,-1表示字符串s不包含字符串str
strings.LastIndex(s,str string) int 返回字符串str在字符串s中的最后出现位置的索引,-1表示字符串s不包含字符串str
strings.IndexRune(s string, r rune) int 如果ch是非ascii编码字符,使用如下函数对字符进行定位
4、字符串替换
将字符串 str 中的前 n 个字符串 old 替换为字符串 new,并返回一个新的字符串,如果 n = -1 则替换所有字符串 old 为字符串 new
strings.Replace(str, old, new string, n int) string
5、统计字符串出现次数
strings.Count(s, str string) int
6、重复字符串
strings.Repeat(s, count int) string 重复 count 次字符串 s 并返回一个新的字符串
7、修改字符串大小写
strings.ToLower(s) string 改成小写
strings.ToUpper(s) string 改成大写
8、开头结尾字符串删除
strings.TrimSpace(s) 去除字符串开头和结尾的空白符号
strings.Trim(str, "He") 去除字符串开头和结尾的空白符号
9、字符串分割
strings.Fields(s) 利用空白作为分隔符将字符串分割为若干块,并返回一个 slice 。如果字符串只包含空白符号,返回一个长度为 0 的 slice
strings.Split(s, sep) 自定义分割符号对字符串分割,返回 slice
10、拼接slice到字符串
strings.Join(sl []string, sep string) string 将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串
11、字符串与其它类型的转换:与字符串相关的类型转换都是通过 strconv 包实现的
数字转字符串:
strconv.Itoa(i int) string 返回数字 i 所表示的字符串类型的十进制数
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string 将 64 位浮点型的数字转换为字符串
字符串转数字:
strconv.Atoi(s string) (i int, err error) 将字符串转换为 int 型
strconv.ParseFloat(s string, bitSize int) (f float64, err error) 将字符串转换为 float64 型
demo
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
str := "Hello ,World,cc"
//判断前后缀
fmt.Println("str prefix is:", strings.HasPrefix(str, "he"))
fmt.Println("str Suffix is:", strings.HasSuffix(str, "d"))
//判断是否包含d字符
fmt.Println("str contain:", strings.Contains(str, "d"))
//判断字符出现位置索引
fmt.Println("the position of the first instance of is l is", strings.Index(str, "l"))
fmt.Println("the position of the last instance of is l is", strings.LastIndex(str, "l"))
fmt.Println("the position of the last instance of is b is", strings.Index(str, "b"))
//替换字符串
//fmt.Println("the hello world is change:", strings.Replace(str, "l", "o", -1)) //替换所有l为o
fmt.Println("the hello world is change:", strings.Replace(str, "l", "o", 2)) //替换2个l为o
//统计字符串出现次数
fmt.Println("the l in s is:", strings.Count(str, "l"))
//重复字符串str 2次,如果count为1则相当于没有变化
fmt.Println("the repeat s is:", strings.Repeat(str, 2))
//修改字符串大小写
fmt.Println("the Lower s is:", strings.ToLower(str))
fmt.Println("the Upper s is:", strings.ToUpper(str))
//开头结尾字符串修剪
fmt.Println("the trim s is:", strings.TrimSpace(str))
fmt.Println("the e trim s is:", strings.Trim(str, "he"))
//字符串分割
fmt.Println("the split1 s is:", strings.Fields(str)) //以空白符分割字符串,返回切片
fmt.Println("the split2 s is:", strings.Split(str, ","))
//字符串拼接
s1 := strings.Split(str, ",")
for _, v1 := range s1 {
fmt.Println(v1)
}
s2 := strings.Join(s1, ";")
fmt.Println(s2)
//字符串与其他类型的转换
var orig string = "666"
var an int
var newS string
fmt.Printf("The size of ints is: %d\n", strconv.IntSize)
an, _ = strconv.Atoi(orig)
fmt.Printf("The integer is: %d\n", an)
an = an + 5
newS = strconv.Itoa(an)
fmt.Printf("The new string is: %s\n", newS)
}