Golang 如何检查一个字符串是否包含一个子串
我们知道,子串是字符串中连续的字符序列,为了检查一个字符串是否包含子串,我们有两种选择。
第一种方法是使用一个叫做 Contains() 的内置函数,第二种方法是使用一个自己编写的逻辑来完成。
strings 包的 Contains() 函数的语法如下所示。
func Contains(s, substr string) bool
在上面的语法中,函数 Contains() 里面有两个参数 。 第一个参数是我们试图寻找模式的字符串,第二个参数是我们试图寻找的模式。
让我们先考虑第一种方法。
例1
考虑一下下面的代码。
package main
import (
"fmt"
"strings"
)
func main() {
var name string = "TutorialsPoint"
fmt.Println(strings.Contains(name, "Point"))
}
输出
如果我们用 go run main.go 命令运行上述代码,那么我们将在终端得到以下输出。
true
现在我们已经看到了在寻找上述字符串中的子串时最常用的方法,让我们考虑一个工作原理相同的代码,但逻辑是自己写的。
例2
考虑一下下面的代码。
package main
import (
"fmt"
)
func main() {
var name string = "TutorialsPoint"
var wordToSearch string = "Point"
res := checkIfExists(name, wordToSearch)
if res {
fmt.Println(wordToSearch, "is present inside the string", name)
} else {
fmt.Println(wordToSearch, "is not present inside the string", name)
}
}
func checkIfExists(name, word string) bool {
l := len(name) - len(word)
for i := 0; i <= l; i++ {
if patternMatch(name, i, word) {
return true
}
}
return false
}
func patternMatch(name string, index int, word string) bool {
i := index
for j := 0; j < len(word); j++ {
if name[i] != word[j] {
return false
}
i++
}
return true
}
在上面的代码中,函数 checkIfExists() 被用来寻找字符串中的模式,进而调用 patternMatch 函数。
输出
如果我们用 go run main.go 命令运行上述代码,那么我们将在终端得到以下输出。
Point is present inside the string TutorialsPoint