go基础库之在字符串中查找子字符串

在字符串中查找子字符串是开发人员最常见的任务之一。大多数主流语言都是在标准库中实现的。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

HasPrefixHasSuffix函数的工作方式不同:内部实现只检查字符串和子字符串的长度,如果它们相等或字符串更长,则比较字符串所需的部分。