在字符串中查找子字符串是开发人员最常见的任务之一。大多数主流语言都是在标准库中实现的。Go也不例外。
在字符串中查找子字符串
Golang 版本
1.12.1
前言
在字符串中查找子字符串是开发人员最常见的任务之一。大多数主流语言都是在标准库中实现的。Go也不例外。
实现
package main
import (
"fmt"
"strings"
)
const refString = "Mary had a little lamb"
func main() {
lookFor := "lamb"
contain := strings.Contains(refString, lookFor)
fmt.Printf("\"%s\" 包含 \"%s\": %t \n", refString,
lookFor, contain)
lookFor = "wolf"
contain = strings.Contains(refString, lookFor)
fmt.Printf("\"%s\" 包含 \"%s\": %t \n", refString,
lookFor, contain)
startsWith := "Mary"
starts := strings.HasPrefix(refString, startsWith)
fmt.Printf("\"%s\" 从 \"%s\" 开始: %t \n", refString,
startsWith, starts)
endWith := "lamb"
ends := strings.HasSuffix(refString, endWith)
fmt.Printf("\"%s\" 到 \"%s\" 结束: %t \n", refString,
endWith, ends)
}
$ go run main.go
"Mary had a little lamb" 包含 "lamb": true
"Mary had a little lamb" 包含 "wolf": false
"Mary had a little lamb" 从 "Mary" 开始: true
"Mary had a little lamb" 到 "lamb" 结束: true
原理
Go的strings
库包含处理字符串操作的函数。这次Contains
函数就可以使用 。该Contains
函数只是检查字符串是否具有给定的子字符串。实际上,Contains函数中使用了Index函数。
要检查字符串是否以子字符串开头,HasPrefix
函数就在那里。要检查字符串是否以子字符串结尾,HasSuffix
函数将起作用。
实际上,该Contains
函数是通过使用来自同一包的Index
函数来实现的 。你可以猜到,实际的实现是这样的:如果给定子字符串的索引大于-1,则Contains
函数返回true
。
HasPrefix
和HasSuffix
函数的工作方式不同:内部实现只检查字符串和子字符串的长度,如果它们相等或字符串更长,则比较字符串所需的部分。