如何删除Golang中字符串的最后一个字符?

gblwokeq  于 2023-01-28  发布在  Go
关注(0)|答案(5)|浏览(301)

我想删除一个字符串的最后一个字符,但在此之前我想检查最后一个字符是否是“+"。这该怎么做呢?

x4shl7ld

x4shl7ld1#

以下是几种删除尾随加号的方法。

package main

import (
    "fmt"
    "strings"
)

func TrimSuffix(s, suffix string) string {
    if strings.HasSuffix(s, suffix) {
        s = s[:len(s)-len(suffix)]
    }
    return s
}

func main() {
    s := "a string ++"
    fmt.Println("s: ", s)

    // Trim one trailing '+'.
    s1 := s
    if last := len(s1) - 1; last >= 0 && s1[last] == '+' {
        s1 = s1[:last]
    }
    fmt.Println("s1:", s1)

    // Trim all trailing '+'.
    s2 := s
    s2 = strings.TrimRight(s2, "+")
    fmt.Println("s2:", s2)

    // Trim suffix "+".
    s3 := s
    s3 = TrimSuffix(s3, "+")
    fmt.Println("s3:", s3)
}

输出:

s:  a string ++
s1: a string +
s2: a string 
s3: a string +
ttygqcqt

ttygqcqt2#

根据@KarthikGR的评论,添加了以下示例:
https://play.golang.org/p/ekDeT02ZXoq

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.TrimSuffix("Foo++", "+"))
}

退货:

Foo+
kxe2p93d

kxe2p93d3#

没有内置的方法,但手工操作很简单。

s := "mystring+"
sz := len(s)

if sz > 0 && s[sz-1] == '+' {
    s = s[:sz-1]
}
hsvhsicv

hsvhsicv4#

package main

import (
    "fmt"
)

func main() {

    s := "venga|ese|sabor|"
    newString := ""
    if len(s) > 0 {
        newString = s[:len(s)-1]
    }
    fmt.Println(newString)
}

输出:文加|埃斯|破坏者
去Playground:
https://go.dev/play/p/o9ExIEuU0SF

tnkciper

tnkciper5#

@拉扎罗
一个简单的UTF兼容字符串修剪器是

string([]rune(foo)[:len(foo)-1]))

所以我觉得

f2 := []rune(foo)
for f2[len(f2)-1] == '+'{
    f2 = f2[:len(f2)-1]
}
foo = string(f2)

https://go.dev/play/p/anOwXlfQWaF
我不知道为什么其他的答案会像他们那样裁剪,因为他们在裁剪字节。

相关问题