golang和python有关字符串操作的对应方法 (来自:flyking)
相关包有strings, strconv
-
判断是否以某字符串打头/结尾
strings.HasPrefix(s string, prefix string) bool => 对应python的str.startswith
strings.HasSuffix(s string, suffix string) bool => 对应python的str.endswith -
字符串分割
strings.Split(s string, sep string) []string => 对应python的str.split -
返回子串索引
strings.Index(s string, sub string) int => 对应python的str.index
strings.LastIndex 最后一个匹配索引 -
字符串连接
strings.Join(a []string, sep string) string =>对应python的str.join -
字符串替换
strings.Replace(s, old, new string, n int) string =>对应python的str.replace
-
转为大写/小写
strings.ToUpper(s string) string
strings.ToLower
对应python的str.upper,str.lower -
子串个数
strings.Count(s string, sep string) int
对应python的 str.count
-
Partition
-
python的str.partition在解析包时候很好用,这里封装一个
1234567891011121314func Partition(s string, sep string) (head string, retSep string, tail string) {
// Partition(s, sep) -> (head, sep, tail)
index := strings.Index(s, sep)
if
index == -1 {
head = s
retSep =
""
tail =
""
}
else
{
head = s[:index]
retSep = sep
tail = s[len(head)+len(sep):]
}
return
}
Partition使用
1
2
3
4
5
6
7
8
|
// 包格式 头(xy) + 数据体 + 尾 (..xy...) // ... _, header, msg := Partition(data, "xy" ) if header == "" { // 没有头(xy)丢包. (也有可能粘包分包导致 "...x", 最后一个(注意是一个)字符变成了x, 这时要把前面的包丢弃,只保留一个x) } else { // do } |
有疑问加站长微信联系(非本文作者)