一、字符串的操作方法
1、len(str) --- 统计字符串长度
2、r := []rune(str) --- 字符串遍历同时处理有中文的问题
3、n, err := strconv.Atoi(str) ---- 字符串转整数
4、str = strconv.Itoa(被转后的数字) --- 整数转字符串
5、var bytes = []byte(str) --- 字符串转[]byte
6、strings.Contains("字符串one", "字符串two") --- 查找字符串two是否在字符串one中返回bool值
7、strings.count("字符串one", "字符串two") ---- 统计字符串two在字符串one中出现的次数
8、
9、
1.1统计字符串的长度 len()
- 统计字符串的长度,按字节len(str)
- golang的编码统一都是utf-8(ascii的字符(字母和数字)占一个字节,汉字占用三个字节)
strOne := "老王"
strtwo := "laowang"
fmt.Println(len(strOne))
fmt.Println(len(strtwo))
1.2、字符串遍历,同时处理有中文的问题
- 大家好奇为什么要这样呢?直接类似python和java一样循环打印不就行了吗,答案是go不支持这样直接遍历,需要转换
- Golang中所有的字符都是以utf-8编码存储的,对于中文字符来说,一个中文字符占3个字节。用传统方式输出的话会出现中文乱码,原因是传统方式是以字节的方式进行遍历的,而中文字符占了3个字节
例如直接遍历字符串
strtest := "laowang 你是一个好人"
for i := 0; i < len(strtest); i++ {
fmt.Printf("%c", strtest[i])
}
1.2.1、遍历带有中文的字符串方式一: str = []rune(str)
str2 := "hello北京"
r := []rune(str2)
for i := 0; i < len(r); i++ {
fmt.Printf("字符=%c\n", r[i])
}
1.2.2、方式二使用for…range
strtest := "laowang 你是一个好人"
for index, val := range strtest {
fmt.Printf("%d, %c", index, val)
}
1.3、字符串转整数:strconv.Atoi(str)
- strconv.Atoi(str), 传递进来一个只有数字的字符串,返回的是int类型和err信息
n, err := strconv.Atoi("123")
if err != nil {
fmt.Println("转换有误", err)
} else {
fmt.Println("转换的成果是: ", n)
}
1.4、整数转字符串 :strconv.Itoa(int)
- strconv.Itoa(int), 传递一个int类型返回str
strnum := strconv.Itoa(123)
fmt.Println("转化后的字符串", strnum)
fmt.Printf("类型是: %T", strnum)
1.5、字符串 转 []byte: var bytes = []byte(str)
var bytes = []byte("hello go")
fmt.Printf("bytes=%v\n", bytes)
1.6、[]byte 转 字符串: str = string([]byte{byte, byte, byte})
str := string([]byte{97, 98, 99})
fmt.Println(str)
1.7、//查找子串是否在指定的字符串中: strings.Contains()
- strings.Contains(“被查的总字符串”,“要查的字符串”)
fmt.Println(strings.Contains("laowang123", "laow"))
1.8、统计一个字符串有几个指定的子串 : strings.Count(“str”, “substr”)
- strings.Count(“sunstr”, “str”) 返回的是int
fmt.Println(strings.Count("老王", "王"))
fmt.Println(strings.Count("lwaong", "王"))
fmt.Println(strings.Count("老王头王", "王"))
1.9、strings.EqualFold(str1,str2),不区分大小写的字符串比较(==是区分字母大小写的)
strnumone := "laowang"
strnumtwo := "Laowang"
fmt.Println(strnumone == strnumtwo)
fmt.Println(strings.EqualFold(strnumone, strnumtwo))
1.10、返回子串在字符串第一次出现的index值,如果没有返回-1 :
fmt.Println(strings.Index("我是老王头", "王"))
fmt.Println(strings.Index("laowangtou", "w"))
fmt.Println(strings.Index("老王头", "你"))
1.11、strings.LastIndex()返回子串在字符串最后一次出现的index,
fmt.Println(strings.LastIndex("老王头", "王"))
fmt.Println(strings.LastIndex("laowang", "a"))
fmt.Println(strings.LastIndex("老王是你", "不"))
1.12、将指定的子串替换成 另外一个子串: strings.Replace()
- 将指定的子串替换成 另外一个子串: strings.Replace(总字符串, 替换的值,替换后的值,替换的次数)
- strings.Replace(“字符串”, ''要替换的字符", “替换后的值” -1 )-1 代表全部替换
fmt.Println(strings.Replace("gogo hello", "go", "go语言", 2))
fmt.Println(strings.Replace("gogogogo", "go", "go语言", -1))
1.13、字符串转化为数组 string.Split()
- 和python一样使用split切割,将字符串按照某个字符切割为数组
- 格式:
- strings.Split(str, “按照某个字符切割”)
strSeptember := "老王,你可,少点,套路吧"
var arr []string = strings.Split(strSeptember, ",")
fmt.Println(arr)
fmt.Printf("%T\n", arr)
----------
strArr := strings.Split("hello,wrold,ok", ",")
for i := 0; i < len(strArr); i++ {
fmt.Printf("str[%v]=%v\n", i, strArr[i])
}
fmt.Printf("strArr=%v\n", strArr)
1.14、将字符串的字母进行大小写的转换:
- strings.ToUpper (str) # 将字符串中的小写字母全部大写
- strings.ToLower (str) # 将字符串中的大写字母全部小写
strUpper := "laowang是一个大流氓"
strUpperto := strings.ToUpper(strUpper)
fmt.Println(strUpperto)
strLower := "LAOWANG住在隔壁"
strLowerto := strings.ToLower(strLower)
fmt.Println(strLowerto)
1.15、将字符串左右两边的空格去掉: strings.TrimSpace(str)
strTrim := " kongge "
fmt.Println(strings.TrimSpace(strTrim))
1.16、将字符串左右两边指定的字符去掉
- strings.Trim(“str”, “要去除的字符”)
strTrim := "alaowanga"
fmt.Println(strings.Trim(strTrim, "a"))
1.17、只去除左边的指定字符
- strings.TrimLeft(str, cutsetstr)
strTrim := "alaowanga"
fmt.Println(strings.TrimLeft(strTrim, "a"))
1.18、只去除右边的指定字符
- strings.TrimRight(str,cutset )
strTrim := "alaowanga"
fmt.Println(strings.TrimRight(strTrim, "a"))
1.19、查询字符所在的下标 index
strIndex := "老王"
fmt.Println(strings.IndexAny(strIndex, "王"))
fmt.Println(strings.Index(strIndex, "王"))
strIndexA := "俺是Laowang老王头"
fmt.Println(strings.Index(strIndexA, "h"))
1.17、判断字符串是否以指定的字符串开头: strings.HasPrefix
- strings.HasPrefix(str,prefix) 返回bool值
strIndexA := "俺是Laowang老王头"
fmt.Println(strings.HasPrefix(strIndexA, "a"))
fmt.Println(strings.HasPrefix(strIndexA, "俺"))