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