go中常用的字符串操作函数
1. 常用操作函数概述
凡是返回索引的 没找到都是返回 -1
函数 | 说明 |
---|---|
Count(str,substr) int | 统计子串出现的次数 |
Contains(str,substr) bool | 包含子串么 |
ContainsAny(str,chars) bool | 包含任何unicode字符(\r\n) |
ContainsRune(str,rune) bool | 包含unicode单个字符 |
LastIndex(str,substr) int | 最后一次出现的index位置 中文会算成 3个字符 |
IndexByte(str,char) int | 第一次字符出现的位置 中文无法使用 |
IndexRune(str,rune) int | 第一次unicode字符出现的位置 |
IndexAny(str,chars) int | 返回任何unicode字符(\r\n)第一次出现的位置 |
LastIndexAny(str,chars) int | 返回任何unicode字符(\r\n)最后一次出现的位置 |
LastIndexByte(str,char) int | 最后一次字符出现的位置 中文无法使用 |
SplitN(str,sep,n) []string | n是切分成几个string 如果是 1不切分 n 前n-1切分 最后一份不管包含多少个sep 都合成一个字符串 不做切分 |
SplitAfterN(str,sep,n) []string | 切分保留分割符 |
Split(str,seq) []string | 正常切分 |
SplitAfter(str,seq) []string | 正常切分并保留分隔符 |
Fields(str) []string | 根据空格分割所有 |
FieldsFunc(str func(r rune)bool{}) | 根据指定规则拆分字符串 |
Join([]string,sep) | 根据指定的分割符合并字符串 |
HasPrefix(str,prex) | 以什么开头 |
HasSuffix(str,sufx) | 以什么结尾 |
Map(func(rune)rune,str) string | 根据自定义函数对字符串进行修改并返回 |
Repeat(str,n) string | 重复某个字符串n次 |
ToUpper(str) | 大写 |
ToLower(str) | 小写 |
TrimLeftFunc(str,func(rune)rune) string | 左侧去指定字符 |
TrimRightFunc(str,func(rune)rune) string | 右侧去指定字符 |
TrimFunc(str,func(rune)rune) string | 倆侧去指定字符 |
IndexFunc(str,func(rune)bool) int | 自定义第一次查找规则 |
LastIndexFunc(str,func(rune)bool) int | 自定义最后一次查找规则 |
Trim(str,cutset) | 这里cutset是一个集合字符串 ";:,]"等等 |
TrimLeft(str,cutset) | 去左侧指定字符 |
TrimRight(str,cutset) | 去右侧指定字符 |
TrimSpace(str) | 去空格 |
TrimPrefix(str,prex) | 去指定前缀 |
TrimSuffix(str,sufx) | 去指定后缀 |
Replace(str,oldstr,newstr,n) | 替换 n为-1 替换全部 |
ReplaceAll(str,oldstr,newstr) | 替换全部 |
EqualFold(str,t) | 比对是否所有的unicode字符都相等 |
Index(str,substr) | 第一次出现的位置 |
2. 去掉指定字符
/**
自定义的trim函数会遍历整个字符串 ,返回每个字符,如果回调函数中出现的字符 返回 true
且 他后面|前面的所有字符 要么返回true 要么没有 这样该字符才会被trim掉
*/
str := "[abebcegefet]"
res := strings.TrimFunc(str, func(r rune) bool {
return r == ']' || r == '[' || r == '哈' || r == 'c'
})
fmt.Println(res) //ab
或
/**
函数结果与上面的完全一样
*/
res2 := strings.Trim(str, "[]哈c")
fmt.Println(res2) //ab
3. 字符串替换
res3 := strings.Replace(str, "哈", "ha", 1) //替换指定个数
fmt.Println(res3) //[abha哈c]
res4 := strings.Replace(str, "哈", "ha", -1) //替换全部
fmt.Println(res4) //[abhahac]
4. 是否包含子串
res5 := strings.Contains(str, "哈哈")
fmt.Println(res5) //true
//------------------------------
res6 := strings.Count(str, "哈哈")
fmt.Println(res6) //1
//------------------------------
ress := strings.Fields("a b c f d g")
for k, v := range ress {
fmt.Println(k, v)
}
5. 字段自定义分割
fmt.Println(strings.FieldsFunc("a,b;c.f\nd\tg", func(r rune) bool {
return strings.ContainsRune("\n\t ,;.", r)
}))
6. 字符串自定义修改
resr := strings.Map(func(r rune) rune {
if strings.ContainsRune("\n\t ,;.", r) {
return ' '
}
return r
}, "a,b;c.f\nd\tg")
fmt.Println(resr)
7.自定义查找规则
比如我们不希望出现的字符是 “天” 那他第一次不出现的时候 我们认为是我们
所要寻找的位置
fmt.Println(strings.IndexFunc("天天都需要你的爱", func(r rune) bool {
return r != '天'
})) //6