修剪字符串的后缀或扩展名?

Cod*_*der 54 string go

例如,我有一个字符串,由"sample.zip"组成.如何使用strings包或其他方法删除".zip"扩展名?

小智 180

尝试:

basename := "hello.blah"
name := strings.TrimSuffix(basename, filepath.Ext(basename))
Run Code Online (Sandbox Code Playgroud)

TrimSuffix基本上告诉它去除尾随字符串,这是带点的扩展名.

TrimSuffix文档在这里

  • 请注意``filepath.Ext("test.tar.gz")`返回`.gz`,它可能是您想要的,也可能不是. (6认同)
  • @TomSawyer 在对路径执行任何操作之前,您应该始终使用 `net/url` 包来解析您的 URL。您可能还想使用“path.Ext”而不是“filepath.Ext”,因为它是通过 HTTP 接收的路径,而不是设计用于文件系统的路径。 (3认同)
  • 我喜欢这个,看起来比做数组数学更具可读性 (2认同)

Pau*_*ane 60

编辑:Go继续前进.请看Keith的回答.

使用path/filepath.Ext获取扩展名.然后,您可以使用扩展的长度来检索子字符串减去扩展名.

var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = filename[0:len(filename)-len(extension)]
Run Code Online (Sandbox Code Playgroud)

或者你可以使用strings.LastIndex来查找最后一个句点(.),但这可能会更脆弱,因为会有边缘情况(例如没有扩展名)filepath.Ext处理你可能需要显式编码,或者如果Go是使用除句点之外的扩展分隔符的理论O/S运行.

  • @rogerdpack,是的,人们应该使用Keith的答案.当我写这个答案时,Go中不存在`TrimSuffix`(它是[2013年2月在Go 1.1中添加](https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r = c7353c98694b135ba941cea93b01e5c0e6a4dd55&格式= unidiff&路径=%2Fsrc%2Fpkg%2Fstrings%2Fstrings.go)). (2认同)
  • 与纯字符串切片相比,“strings.TrimSuffix”会进行不必要/冗余的比较。就性能而言,没什么大不了的,但有微小的差异,而且两种解决方案都很容易理解。 (2认同)