为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不删除分隔符的情况下拆分 Golang 字符串?

如何在不删除分隔符的情况下拆分 Golang 字符串?

Go
幕布斯6054654 2023-03-21 14:53:10
根据How to split a string and assign it to variables in Golang? 的回答。拆分字符串会生成一个字符串数组,其中分隔符不存在于数组中的任何字符串中。有没有办法拆分字符串,使分隔符位于给定字符串的最后一行?以前的s := strings.split("Potato:Salad:Popcorn:Cheese", ":")for _, element := range s {    fmt.Printf(element)}输出:PotatoSaladPopcornCheese我希望输出以下内容:Potato:Salad:Popcorn:Cheese我知道理论上我可以将“:”附加到除最后一个元素之外的每个元素的末尾,但如果可能的话,我正在寻找更通用、更优雅的解决方案。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

您正在寻找SplitAfter。

s := strings.SplitAfter("Potato:Salad:Popcorn:Cheese", ":")

  for _, element := range s {

  fmt.Println(element)

}

// Potato:

// Salad:

// Popcorn:

// Cheese


查看完整回答
反对 回复 2023-03-21
?
交互式爱情

TA贡献1712条经验 获得超3个赞

daplho 上面的答案非常简单。有时我只是想提供一种替代方法来消除函数的魔力


package main


import "fmt"


var s = "Potato:Salad:Popcorn:Cheese"


func main() {

    a := split(s, ':')

    fmt.Println(a)

}


func split(s string, sep rune) []string {

    var a []string

    var j int

    for i, r := range s {

        if r == sep {

            a = append(a, s[j:i+1])

            j = i + 1

        }

    }

    a = append(a, s[j:])

    return a

}

https://goplay.space/#h9sDd1gjjZw


作为旁注,标准的 lib 版本比上面的草率版本要好


goos: darwin

goarch: amd64

BenchmarkSplit-4             5000000           339 ns/op

BenchmarkSplitAfter-4       10000000           143 ns/op

所以跟那个大声笑


查看完整回答
反对 回复 2023-03-21
?
动漫人物

TA贡献1815条经验 获得超10个赞

试试这个以获得正确的结果。


package main


    import (

        "fmt"

        "strings"

    )


    func main() {

        str := "Potato:Salad:Popcorn:Cheese"

        a := strings.SplitAfter(str, ":")

        for i := 0; i < len(a); i++ {

            fmt.Println(a[i])

        }

    }


查看完整回答
反对 回复 2023-03-21
  • 3 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信