在golang中最后一个出现分隔符的地方分割字符串

时间:2018-07-30 16:16:39

标签: string go split

我正在尝试用golang中最后一个出现的分隔符(/)分割字符串

例如,我有一个字符串“ a / b / c / d”,执行分割后,我想要一个字符串数组,如下所示

[
"a/b/c",
"a/b"
"a"
]

我尝试探索字符串包,但是找不到任何执行此操作的功能

func main() {
    fmt.Printf("%q\n", strings.Split("a/b/c/d/e", "/"))
}

我可以知道一种解决方法吗?

3 个答案:

答案 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
}