Golang没有php所具有的strrchr
功能。如果我想从这个字符串中删除/path
(包括最后的斜杠),那么如何在golang中删除它?
mystr := "/this/is/my/path"
期望的输出
"/this/is/my"
我可以像这样得到最终斜杠的索引
lastSlash := strings.LastIndex(mystr, "/")
但我不确定如何创建删除了/path
的新字符串。怎么做?
答案 0 :(得分:3)
尝试output := mystr[:strings.LastIndex(mystr, "/")]
mystr := "/this/is/my/path"
idx := strings.LastIndex(mystr, "/")
if idx != -1{
mystr = mystr[:idx]
}
fmt.Println(mystr)
答案 1 :(得分:3)
captncraig的答案适用于任何类型的分隔符char,但假设你在POSIX风格的机器上运行(" /"是路径分隔符),你操作的确实是路径:
http://play.golang.org/p/oQbXTEhH30
package main
import (
"fmt"
"path/filepath"
)
func main() {
s := "/this/is/my/path"
fmt.Println(filepath.Dir(s))
// Output: /this/is/my
}
来自godoc(https://golang.org/pkg/path/filepath/#Dir):
Dir返回除路径的最后一个元素之外的所有元素,通常是路径的目录。删除最后一个元素后,路径将被清除并删除尾部斜杠。
虽然如果您使用/path
运行它,它将返回/
,这可能是您想要的,也可能不是。
答案 2 :(得分:0)
以前(非常令人满意的)解决方案未涵盖的一个角落案例是尾随/
。即 - 如果您希望/foo/bar/quux/
修剪为/foo/bar
而不是/foo/bar/quux
。这可以通过regexp
库完成:
mystr := "/this/is/my/path/"
trimpattern := regexp.MustCompile("^(.*?)/[^/]*/?$")
newstr := trimpattern.ReplaceAllString(mystr, "$1")
fmt.Println(newstr)
这里有一个更全面的例子:http://play.golang.org/p/ii-svpbaHt