在golang中分隔符后修剪所有内容

Tim*_*Ski 7 go

我有一个float64我转换成一个字符串: 30.060671

我正试图修剪/删除/扼杀一切 30

我试过的一些事情:

fmt.Println(strings.TrimRight("30.060671", ".([0-9])"))
fmt.Println(strings.TrimRight("30.060671", "."))
fmt.Println(strings.TrimSuffix("30.060671", "."))
Run Code Online (Sandbox Code Playgroud)

Iam*_*NaN 15

一种方法是使用strings.Split期间:

parts := strings.Split("30.060671", ".")
fmt.Println(parts[0])
Run Code Online (Sandbox Code Playgroud)

另一种选择是首先转换为int,然后转换为字符串:

a := 30.060671
b := int(a)    
fmt.Println(b)
Run Code Online (Sandbox Code Playgroud)


mvn*_*aai 6

以下是如何获取分隔符的任一侧。

Go.18使用后strings.Cut

string := "Symver.0.1.0"
delimiter := "."

leftOfDelimiter, rightOfDelimiter, found := strings.Cut(string, delimiter)

fmt.Println("Left of Delimiter: ", leftOfDelimiter)
fmt.Println("Right of Delimiter: ", rightOfDelimiter)
fmt.Println("Found: ", found)

//Left of Delimiter:  Symver
//Right of Delimiter:  0.1.0
//Found:  true
Run Code Online (Sandbox Code Playgroud)

https://go.dev/play/p/tS4RpBKlxiV

Go1.18之前

string := "Symver.0.1.0"
delimiter := "."

leftOfDelimiter := strings.Split(string, delimiter)[0]
rightOfDelimiter := strings.Join(strings.Split(string, delimiter)[1:], delimiter)

fmt.Println("Left of Delimiter: ", leftOfDelimiter)
fmt.Println("Right of Delimiter: ", rightOfDelimiter)   

//Left of Delimiter:  Symver
//Right of Delimiter:  0.1.0
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/HBi4G5tBL9

  • 请注意:如果您的字符串不包含分隔符怎么办?那么 Split 就不会具有 2 或更大的大小...无论如何,良好的单元测试应该能够捕获问题,但仍然如此。 (2认同)

Anz*_*zel 5

按照@p ??????? 在注释中建议,在转换为string之前,应该先对浮点数进行四舍五入。

无论如何,这是我尝试使用strings.Index从中修剪其余部分.

func trimStringFromDot(s string) string {
    if idx := strings.Index(s, "."); idx != -1 {
        return s[:idx]
    }
    return s
}
Run Code Online (Sandbox Code Playgroud)

操场

另外,要回答为什么TrimRightTrimSuffix无法按预期方式工作是因为.它不是尾随字符串/ unicode:

TrimRight返回字符串s的一部分,其中删除了cutset中包含的所有尾随Unicode代码点。

TrimSuffix返回s,但不提供结尾的后缀字符串。如果s不以后缀结尾,则s不变返回。

  • 我喜欢这个答案!要完成主题中问题的答案,请使用“strings.LastIndex(s, ".")”来获取分隔符的最后一个索引。 (2认同)