在Golang的字符串处理场景中,查找某个字符或者子串在目标字符串里最后出现的位置是高频需求,标准库的strings包提供了LastIndex函数专门实现这个功能,它可以帮助开发者快速定位目标内容的位置,简化字符串处理逻辑。

strings.LastIndex函数基本定义
strings.LastIndex是Golang标准库strings包下的导出函数,它的作用是返回子串sep在字符串s中最后一次出现的索引位置,如果不存在则返回-1。其函数签名如下:
func LastIndex(s, sep string) int
参数说明:
- s:待查找的目标字符串
- sep:需要查找的子串或者单个字符
返回值是一个int类型的整数,代表最后一次出现的位置索引,索引从0开始计数,如果子串不存在则返回-1。
基础使用示例
下面通过几个简单的示例展示LastIndex的基本用法,首先是最基础的字符查找场景:
package main
import (
"fmt"
"strings"
)
func main() {
// 查找单个字符最后出现的位置
str := "hello world"
// 查找字符l最后出现的位置
index := strings.LastIndex(str, "l")
fmt.Printf("字符l最后出现的位置是:%dn", index) // 输出:字符l最后出现的位置是:9
}
接下来是查找子串的场景,比如查找某个单词在字符串中最后出现的位置:
package main
import (
"fmt"
"strings"
)
func main() {
str := "go is good, golang is better, go is useful"
// 查找子串go最后出现的位置
index := strings.LastIndex(str, "go")
fmt.Printf("子串go最后出现的位置是:%dn", index) // 输出:子串go最后出现的位置是:24
}
特殊场景说明
子串不存在的情况
如果查找的子串在目标字符串中不存在,LastIndex会返回-1,示例如下:
package main
import (
"fmt"
"strings"
)
func main() {
str := "hello golang"
index := strings.LastIndex(str, "python")
fmt.Printf("子串python最后出现的位置是:%dn", index) // 输出:子串python最后出现的位置是:-1
}
子串为空字符串的情况
如果传入的sep参数是空字符串,LastIndex会返回目标字符串的长度,因为空字符串可以认为出现在字符串的末尾之后,示例如下:
package main
import (
"fmt"
"strings"
)
func main() {
str := "test"
index := strings.LastIndex(str, "")
fmt.Printf("空字符串最后出现的位置是:%dn", index) // 输出:空字符串最后出现的位置是:4
}
和strings.Index的区别
很多开发者会混淆LastIndex和Index函数,两者的核心差异是查找方向不同:
| 函数名 | 查找方向 | 返回值说明 |
|---|---|---|
| strings.Index | 从字符串开头向结尾查找 | 返回子串第一次出现的索引,不存在返回-1 |
| strings.LastIndex | 从字符串结尾向开头查找 | 返回子串最后一次出现的索引,不存在返回-1 |
下面通过一个对比示例更直观地展示两者的差异:
package main
import (
"fmt"
"strings"
)
func main() {
str := "ababab"
firstIndex := strings.Index(str, "ab")
lastIndex := strings.LastIndex(str, "ab")
fmt.Printf("第一次出现的位置:%dn", firstIndex) // 输出:第一次出现的位置:0
fmt.Printf("最后一次出现的位置:%dn", lastIndex) // 输出:最后一次出现的位置:4
}
实际开发场景应用
在实际开发中,LastIndex经常用来处理文件路径、URL等场景,比如获取文件名的后缀位置,或者获取URL的路径部分。下面是一个获取文件路径中文件名起始位置的示例:
package main
import (
"fmt"
"strings"
)
func main() {
filePath := "/home/user/documents/report.pdf"
// 查找最后一个/的位置,后面的部分就是文件名
lastSlashIndex := strings.LastIndex(filePath, "/")
if lastSlashIndex != -1 {
fileName := filePath[lastSlashIndex+1:]
fmt.Printf("文件名是:%sn", fileName) // 输出:文件名是:report.pdf
}
}
需要注意的是,LastIndex查找的是字节索引,对于纯ASCII字符的字符串没有问题,如果字符串包含多字节的Unicode字符,比如中文,需要注意索引对应的是字节位置,而不是字符位置。如果需要按字符位置查找,可以先将字符串转换为rune切片再处理。
Golangstrings.LastIndex字符串查找最后位置查找修改时间:2026-07-19 03:21:24