String操作

使用下边访问字符串

// 只有英文字符时
var str string
str = "hello"
fmt.Println("s0: ", str[0], " string:", string(str[0]))
// 中文字符时
var str2 string
str2 = "你好"
fmt.Println("s0: ", str2[0], " string:", string(str2[0]))


因为字符串时, 可以正常输出下标对应的值, 但是中文字符串时就乱码了, 所以我们可以使用 for range 的方式访问;

遍历字符串

使用for range遍历string,

func main() {
 str3, err := find(str2, 0)
 fmt.Println("str3: ", str3, string(str3), "err: ", err)
}
func find(s string, index int) (rune, error) {
 for i, v := range s {
 if i == index {
 return v, nil
 }
 }
 return rune(0), errors.New("out of range")
}

字符串拼接

对字符串进行pop操作, 使用 str[:len(str)-1], 在切片中也可以如此操作;

var str string
str = "string"
fmt.Println("源字符串: ", str)
fmt.Println("拼接字符串: ", str+"p")
fmt.Println("移除最后一个字符串: ", str[:len(str)-1])

检查字符串是否相等

最简单的方法是使用 < > == >= <= 等操作符实现,非常灵活。

也可以使用 strings.Compare(a, b string) 方法实现,直接使用操作符返回的是 bool 值,而 strings.Compare 返回 -1 0 1 三者之一。想到什么没有?可以使用 switch 语句,减少大量的 if-else 语句。

func main() {
 a, b := "hello", "world"
 switch strings.Compare(a, b) {
 case 0:
 fmt.Printf("%q==%q", a, b)
 case -1:
 fmt.Printf("%q<%q", a, b)
 case 1:
 fmt.Printf("%q>%q", a, b)
 }
}

判断是否子串

// s中是否包含substr
strings.Contains(s, substr string) bool

示例:

var find string
var desStr string
find = "你"
desStr = "你, hello"
contains := strings.Contains(desStr, find)
if contains {
 fmt.Println("desStr:", desStr, "包含", "find:", find)
} else {
 fmt.Println("desStr:", desStr, "不包含", "find:", find)
}
find = "ppp2"
desStr = "hello ppp"
contains = strings.Contains(desStr, find)
if contains {
 fmt.Println("desStr:", desStr, "包含", "find:", find)
} else {
 fmt.Println("desStr:", desStr, "不包含", "find:", find)
}

// s中是否包含chars中任何一个
strings.ContainsAny(s, chars string) bool

示例:

var str string
var s string
str = "你哈哈哈哈哈哈"
s = "我的哈"
checkIsAny := strings.ContainsAny(str, s)
if checkIsAny {
 fmt.Println("str :", str, "包含", "s:", s, "中任何一个")
} else {
 fmt.Println("str :", str, "不包含", "s:", s, "中任何一个")
}
str = "明天天气真不错"
s = "猴子"
checkIsAny = strings.ContainsAny(str, s)
if checkIsAny {
 fmt.Println("str :", str, "包含", "s:", s, "中任何一个")
} else {
 fmt.Println("str :", str, "不包含", "s:", s, "中任何一个")
}

没错,判断是否包含子串就是搜索子串下标,然后判断搜索下标是否为 -1。

参考文档:
理解go中rune数据类型
Golang 字符串操作

作者:赞原文地址:https://segmentfault.com/a/1190000043862817

%s 个评论

要回复文章请先登录注册