问题
看这样一个例子:
1
2
3
4
5
6
7
8
9
10
11
|
package main
import (
"fmt"
"strings"
)
func main() {
str := "/some/key"
fmt.Println(strings.TrimLeft(str, "/some"))
}
|
1
2
3
|
key
Program exited.
|
上例有正确返回,再看一例:
1
2
3
4
5
6
7
8
9
10
11
|
package main
import (
"fmt"
"strings"
)
func main() {
str := "/some/sugar"
fmt.Println(strings.TrimLeft(str, "/some"))
}
|
1
2
3
|
ugar
Program exited.
|
这例没有正确返回,下面进行解释
解释
我们使用的是TrimLeft函数:
1
2
3
4
5
|
func TrimLeft
func TrimLeft(s string, cutset string) string
TrimLeft returns a slice of the string s with all leading Unicode code points contained in cutset removed.
|
实际上,还有一个TrimPrefix的函数:
1
|
TrimPrefix returns s without the provided leading prefix string. If s doesn’t start with prefix, s is returned unchanged.
|
这两个函数有什么区别呢,cutset指的是什么意思?
我们举个例子看看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package main
import (
"fmt"
"strings"
)
func main() {
nodeOnlinePrefix := "/nodesli"
kvs := []string{
"/nodes/online/1ebbaa95eba5",
"/nodes/online/d39d0dd1c159",
"/nodes/online/d66b00076d8c",
}
nodes := []string{}
for _, v := range kvs {
str := fmt.Sprintf("%s", v)
fmt.Printf("online node got key %s\n", str)
n := strings.TrimLeft(str, nodeOnlinePrefix)
fmt.Printf("online node got node %s\n", n)
nodes = append(nodes, strings.TrimSpace(n))
}
fmt.Printf("online nodes: %v\n", nodes)
}
|
1
2
3
4
5
6
7
|
online node got key /nodes/online/1ebbaa95eba5
online node got node 1ebbaa95eba5
online node got key /nodes/online/d39d0dd1c159
online node got node 39d0dd1c159
online node got key /nodes/online/d66b00076d8c
online node got node 66b00076d8c
online nodes: [1ebbaa95eba5 39d0dd1c159 66b00076d8c]
|
这个所谓的cutset就是一个字符集, 而TrimLeft就是从左开始, 如果发现了不在cutset中的字符, 就从这个点返回.
比如有一个字符串 “1112345111”, TrimLeft(“1112345111”, “1”) 之后就成了 2345111, 对应的, TrimRight(“1112345111”, “1”)就变成了"1112345"; Trim(“1112345111”, “1”)则是从两头都砍, 返回的结果是"2345"
这是cutset中只有一个字符的情况, 如果集合中有多个字符,那么就从里面开始匹配, 什么时候找不到了, 就返回.
那么怎么才能去掉开头的一个”1”呢, 就是用TrimPrefix(“1112345111”, “1”), 对应的, 除去末尾的话, 就用 TrimSuffix.
转载:https://wrfly.kfd.me/posts/go-trimleft-and-trimprefix/