go去掉最后一个字符_【已解决】go语言中字符串的分割和替换:去掉文件名中的后缀...

本文介绍了如何在Go语言中通过字符串操作去除文件名的后缀。通过使用`path.Base`获取文件名,`path.Ext`获取后缀,结合`strings.TrimSuffix`函数精准替换或截取字符串,实现只移除最后一个后缀的效果。示例代码展示了不同情况下的正确处理。
摘要由CSDN通过智能技术生成

【问题】

折腾:

期间,已经获得了:

文件名:EmulateLoginBaidu.go

文件后缀:.go

现在,想要通过字符串的分割和替换,获得文件名本身:

EmulateLoginBaidu

【折腾过程】

1.此处,很明显,不是简单的,直接替换文件名中的.go为空,

否则,如果是:

xxx.go.go.go

那么本来希望得到:

xxx.go.go

结果只能得到

xxx

所以,要实现,精准的,字符串的替换或截取。

另外,也最好不要用split,否则是上面的文件名中带点的,也多半被分割成多个子字符串,还要再去合并,很是麻烦。

最佳的操作是:

获得文件后缀(也可能是空)

然后从文件名(可能包含点xxx.xxx.xxx.go,可能不含后缀:xxxyyy)

然后去:

从字符串的尾部,将文件的后缀,替换为空,且仅仅替换最后的后缀,不能再往前操作了。

2.参考:

去看看:

然后继续看看别的函数,最后,终于找到我想要的了:

其直接可以实现我上面要的功能:

直接去除尾部的后缀,且如果不存在对应的后缀,则保持源字符串不变。

所以,可以去试试了:package main

import (

"fmt"

//"log"

//"os"

//"io/ioutil"

//"net/http"

"runtime"

"path"

"strings"

)

func main() {

fmt.Printf("this is EmulateLoginBaidu.go\n")

_, fulleFilename, line, _ := runtime.Caller(0)

fmt.Println(fulleFilename)

fmt.Println(line)

var filenameWithSuffix string

filenameWithSuffix = path.Base(fulleFilename)

fmt.Println("filenameWithSuffix=", filenameWithSuffix)

var fileSuffix string

fileSuffix = path.Ext(filenameWithSuffix)

fmt.Println("fileSuffix=", fileSuffix)

var filenameOnly string

filenameOnly = strings.TrimSuffix(filenameOnly, fileSuffix)

fmt.Println("filenameOnly=", filenameOnly)

}

结果是:D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go

this is EmulateLoginBaidu.go

D:/tmp/tmp_dev_root/go/src/github.com/user/EmulateLoginBaidu/EmulateLoginBaidu.go

17

filenameWithSuffix= EmulateLoginBaidu.go

fileSuffix= .go

filenameOnly=

很明显,出错了。

3.再去试试:package main

import (

"fmt"

//"log"

//"os"

//"io/ioutil"

//"net/http"

"runtime"

"path"

"strings"

)

func main() {

fmt.Printf("this is EmulateLoginBaidu.go\n")

_, fulleFilename, line, _ := runtime.Caller(0)

fmt.Println(fulleFilename)

fmt.Println(line)

var filenameWithSuffix string

filenameWithSuffix = path.Base(fulleFilename)

fmt.Println("filenameWithSuffix=", filenameWithSuffix)

var fileSuffix string

fileSuffix = path.Ext(filenameWithSuffix)

fmt.Println("fileSuffix=", fileSuffix)

var filenameOnly string

filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)

fmt.Println("filenameOnly=", filenameOnly)

}

结果是:D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go

this is EmulateLoginBaidu.go

D:/tmp/tmp_dev_root/go/src/github.com/user/EmulateLoginBaidu/EmulateLoginBaidu.go

17

filenameWithSuffix= EmulateLoginBaidu.go

fileSuffix= .go

filenameOnly= EmulateLoginBaidu

得到了基本的效果:

将.go从EmulateLoginBaidu.go的尾部去除。

4.再去试试,其他一些效果:filenameWithSuffix = "EmulateLoginBaidu"

fileSuffix = ".go"

var filenameOnly string

filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)

fmt.Println("filenameOnly=", filenameOnly)

结果是:filenameOnly= EmulateLoginBaidu

5.再去试试://filenameWithSuffix = "EmulateLoginBaidu"

//fileSuffix = ".go"

filenameWithSuffix = "EmulateLoginBaidu.go.go.go"

fileSuffix = ".go"

var filenameOnly string

filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)

fmt.Println("filenameOnly=", filenameOnly)

结果是:filenameOnly= EmulateLoginBaidu.go.go

6.再去试试:filenameWithSuffix = "EmulateLoginBaidu.go.txt"

fileSuffix = ".go"

var filenameOnly string

filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)

fmt.Println("filenameOnly=", filenameOnly)

结果是:filenameOnly= EmulateLoginBaidu.go.txt

至此,全部实现了预期的效果了:

【总结】

在已经获得了带后缀的文件名和后缀名后,可以通过:package main

import (

"fmt"

"runtime"

"path"

"strings"

)

func main() {

_, fulleFilename, line, _ := runtime.Caller(0)

fmt.Println(fulleFilename)

fmt.Println(line)

var filenameWithSuffix string

filenameWithSuffix = path.Base(fulleFilename)

fmt.Println("filenameWithSuffix=", filenameWithSuffix)

var fileSuffix string

fileSuffix = path.Ext(filenameWithSuffix)

fmt.Println("fileSuffix=", fileSuffix)

var filenameOnly string

filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)

fmt.Println("filenameOnly=", filenameOnly)

}

获得希望的效果:D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go

D:/tmp/tmp_dev_root/go/src/github.com/user/EmulateLoginBaidu/EmulateLoginBaidu.go

17

filenameWithSuffix= EmulateLoginBaidu.go

fileSuffix= .go

filenameOnly= EmulateLoginBaidu

的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值