avatar

golang strings常用操作

中文长度及遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"

func main() {
s := "我是中文"
fmt.Println(len(s))
fmt.Println(len([]rune(s))) // 正常获取到长度

// 遍历
for _,word := range []rune(s) {
fmt.Println(string(word))
}
}
1
2
3
4
5
6
7
output:
12
4




包含

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"strings"
)

func main() {
fmt.Println(strings.Contains("我是中文", "我"))
fmt.Println(strings.Contains("我是中文", "中文"))
fmt.Println(strings.Contains("我是中文", "不知道"))
fmt.Println(strings.Contains("我是中文", ""))
fmt.Println(strings.Contains("", ""))
}
1
2
3
4
5
6
output:
true
true
false
true
true

比较

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
"strings"
)

func main() {
fmt.Println(strings.Compare("我是中文1", "我是中文0"))
fmt.Println(strings.Compare("我是中文1", "我是中文1"))
fmt.Println(strings.Compare("我是中文1", "我是中文2"))
}
1
2
3
4
output:
1
0
-1

count 统计

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
"strings"
)

func main() {
fmt.Println(strings.Count("我是中文, 中国", "我"))
fmt.Println(strings.Count("我是中文, 中国", "中"))
fmt.Println(strings.Count("我是中文, 中国, 中文", "中文"))
}
1
2
3
4
output:
1
2
2

分字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
"fmt"
"strings"
)

func main() {
fmt.Printf("%q\n", strings.Fields("How old \t are you"))

// 自定义分割
fmt.Printf("%q\n", strings.FieldsFunc("How old \t are you", func(r rune) bool {
return '\t' == r
}))

fmt.Printf("%q\n", strings.Split("How,old,are,you", "w,"))

//N <0 全部, =0, 空, > 0
fmt.Printf("-1 %q\n", strings.SplitN("How,old,are,you", ",", -1))
fmt.Printf("0 %q\n", strings.SplitN("How,old,are,you", ",", 0))
fmt.Printf("1 %q\n", strings.SplitN("How,old,are,you", ",", 1))
fmt.Printf("2 %q\n", strings.SplitN("How,old,are,you", ",", 2))
// ps: SplitAfter 会保留 sep
}
1
2
3
4
5
6
7
8
output:
["How" "old" "are" "you"]
["How old " " are you"]
["Ho" "old,are,you"]
-1 ["How" "old" "are" "you"]
0 []
1 ["How,old,are,you"]
2 ["How" "old,are,you"]

有前缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"strings"
)

func main() {
fmt.Println(strings.HasPrefix("我是中文", "我"))
fmt.Println(strings.HasPrefix("我是中文", "我是"))
fmt.Println(strings.HasPrefix("我是中文", "中"))
fmt.Println(strings.HasPrefix("我是中文", "无"))
fmt.Println(strings.HasPrefix("我是中文", ""))
}
1
2
3
4
5
6
output:
true
true
false
false
true

Trim 删除前后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
"strings"
)

func main() {
// 删除左右空串
fmt.Printf("%q\n", strings.TrimSpace(" \t \n 我是中文 \t"))
// 删除左右字符
fmt.Printf("%q\n", strings.Trim("!!! 我是中文 !!##","!#"))
// 删除左边
fmt.Printf("%q\n", strings.TrimLeft("!!! 我是中文 !!", "!我"))
fmt.Printf("%q\n", strings.TrimLeft("我是中文 !!", "!我"))
// TrimLeftFunc, TrimPrefix, TrimRight,TrimSuffix 类似 不再演示

}
1
2
3
4
5
output:
"我是中文"
" 我是中文 "
" 我是中文 !!"
"是中文 !!"

替换

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import (
"fmt"
"strings"
)

func main() {
// n 替换次数, 如果 n < 0,则不限制替换次数,即全部替换
fmt.Println(strings.Replace("hello hello hello", "h", "--", 2))
fmt.Println(strings.Replace("hello hello hello", "he", "##", -1))
fmt.Println(strings.ReplaceAll("hello hello hello", "he", "%%"))
}
1
output
文章作者: 喵九命
文章链接: http://blog.ik3s.top/2020/04/12/golang-strings%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 远方除了遥远一无所有
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论