【问题标题】:How to slice string till particular character in Go?如何在Go中将字符串切片直到特定字符?
【发布时间】:2017-10-19 19:15:53
【问题描述】:

我想提取一个字符串直到找到一个字符。例如:

message := "Rob: Hello everyone!"
user := strings.Trim(message,

我希望能够存储"Rob"(读取直到找到':')。

【问题讨论】:

    标签: string go substring slice


    【解决方案1】:

    您可以使用strings.IndexByte()strings.IndexRune() 来获取冒号':' 的位置(字节索引),然后简单地使用slicestring 值:

    message := "Rob: Hello everyone!"
    user := message[:strings.IndexByte(message, ':')]
    fmt.Println(user)
    

    输出(在Go Playground上试试):

    Rob
    

    如果您不确定冒号是否在string 中,则必须在继续对string 进行切片之前检查索引,否则会出现运行时恐慌。你可以这样做:

    message := "Rob: Hello everyone!"
    if idx := strings.IndexByte(message, ':'); idx >= 0 {
        user := message[:idx]
        fmt.Println(user)
    } else {
        fmt.Println("Invalid string")
    }
    

    输出是一样的。

    将消息更改为无效:

    message := "Rob Hello everyone!"
    

    这次的输出是(在Go Playground上试试):

    Invalid string
    

    另一个方便的解决方案是使用strings.Split():

    message := "Rob: Hello everyone!"
    
    parts := strings.Split(message, ":")
    fmt.Printf("%q\n", parts)
    
    if len(parts) > 1 {
        fmt.Println("User:", parts[0])
    }
    

    输出(在Go Playground 上试试):

    ["Rob" " Hello everyone!"]
    User: Rob
    

    如果输入 string 中没有冒号,strings.Split() 会返回一个字符串切片,其中包含单个 string 值作为输入(在这种情况下,上面的代码不会打印任何内容,因为长度将为 @987654345 @)。

    【讨论】:

      【解决方案2】:

      strings.Indexstrings.IndexRune,取决于您是否要使用 unicode 作为分隔符,将为您提供所查找字符的索引。

      或者,您可以使用 strings.Split 并获取返回的第一个字符串。

      示例:user := strings.Split(message, ":")[0]

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

      值得注意的是,如果分隔符不在原始字符串中,这不会出现恐慌,但 user 变量将被设置为整个原始字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-21
        • 2017-02-19
        • 1970-01-01
        • 2023-02-24
        • 1970-01-01
        • 2020-11-27
        • 2020-09-21
        • 2021-01-08
        相关资源
        最近更新 更多