我正在尝试用golang中最后一个出现的分隔符(/)分割字符串
例如,我有一个字符串“ a / b / c / d”,执行分割后,我想要一个字符串数组,如下所示
[
"a/b/c",
"a/b"
"a"
]
我尝试探索字符串包,但是找不到任何执行此操作的功能
func main() {
fmt.Printf("%q\n", strings.Split("a/b/c/d/e", "/"))
}
我可以知道一种解决方法吗?
答案 0 :(得分:3)
由于这是用于路径操作,并且您似乎不需要尾随路径分隔符,所以path.Dir
会执行您要查找的操作:
fmt.Println(path.Dir("a/b/c/d/e"))
// a/b/c/d
如果这是专门针对文件系统路径的,则您将希望使用filepath
包来正确处理多个路径分隔符。
答案 1 :(得分:1)
使用strings.LastIndex
import (
"fmt"
"strings"
)
func main() {
x := "a_ab_daqe_sd_ew"
lastInd := strings.LastIndex(x, "_")
fmt.Println(x[:lastInd]) // o/p: a_ab_daqe_sd
fmt.Println(x[lastInd+1:]) // o/p: ew
}
注意,字符串。如果通过子字符串,则LastIndex 返回-1 (在上面的示例中为“ _”)未找到
答案 2 :(得分:0)
这是一个简单的函数,它使用filepath.Dir(string)
来构建给定文件路径的所有祖先目录的列表:
func main() {
fmt.Printf("OK: %#v\n", parentsOf("a/b/c/d"))
// OK: []string{"a/b/c", "a/b", "a"}
}
func parentsOf(s string) []string {
dirs := []string{}
for {
parent := filepath.Dir(s)
if parent == "." || parent == "/" {
break
}
dirs = append(dirs, parent)
s = parent
}
return dirs
}