Golang strings.LastIndexFunc()函数及示例
在Go编程语言中,strings包是个常用的标准库,提供了很多操作字符串的函数。其中就包括strings.LastIndexFunc()函数,它用于从字符串的末尾开始搜索,返回满足条件的字符的最后一个索引值。
语法
func LastIndexFunc(s string, f func(rune) bool) int
参数
该函数接收两个参数:
- s:要搜索的源字符串
- f:定义搜索条件的函数。该函数需要接收一个rune类型的参数,并返回一个布尔值
返回值
如果找到符合条件的字符,则该函数返回字符所在位置的索引;如果没有找到符合条件的字符,则返回-1。
示例
我们来看几个示例,以更好地理解这个函数的用法。
示例1
从末尾开始查找以“r”结尾的单词
package main
import (
"fmt"
"strings"
)
func main() {
s := "Hello World"
// 首先将字符串 s 拆分为单词数组 words,以便每个单词可以进行比较
words := strings.Fields(s)
for i := 0; i < len(words); i++ {
// 搜索单词是否以“r”结尾,使用了strings.LastIndexFunc()函数
if strings.LastIndexFunc(words[i], func(r rune) bool {
return r == 'r'
}) == len(words[i])-1 {
fmt.Printf("%s ends with 'r'\n", words[i])
}
}
}
输出:
World ends with 'r'
在上面的示例中,我们使用strings.Fields()函数将字符串拆分成单词,并使用strings.LastIndexFunc()函数搜索以“r”结尾的单词。
示例2
从末尾开始查找以数字结尾的单词
package main
import (
"fmt"
"strings"
"unicode"
)
func main() {
s := "The quick brown fox jumps over the 12 lazy dogs 38."
words := strings.Fields(s)
for i := 0; i < len(words); i++ {
if strings.LastIndexFunc(words[i], unicode.IsDigit) == len(words[i])-1 {
fmt.Printf("%s ends with a digit\n", words[i])
}
}
}
输出:
12 ends with a digit
38. ends with a digit
在上面的示例中,我们使用unicode.IsDigit函数作为第二个参数。这个函数用于判断是否为数字。
示例3
从末尾开始查找以元音字母结尾的单词
package main
import (
"fmt"
"strings"
)
func main() {
s := "The quick brown fox jumps over the lazy dog"
words := strings.Fields(s)
for i := 0; i < len(words); i++ {
if strings.LastIndexFunc(words[i], func(r rune) bool {
return r == 'a' || r == 'e' || r == 'i' || r == 'o' || r == 'u'
}) == len(words[i])-1 {
fmt.Printf("%s ends with a vowel\n", words[i])
}
}
}
输出:
The ends with a vowel
lazy ends with a vowel
dog ends with a vowel
在上面的示例中,我们使用一个函数作为第二个参数,该函数用于在单词中查找是否以元音字母结尾。
结论
strings.LastIndexFunc()函数是一个很有用的函数,它能够从字符串末尾开始搜索符合条件的字符并返回它们的位置索引。通过使用这个函数,我们可以轻松地找到字符串中的特定字符或模式。
极客笔记