Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在不删除分隔符的情况下拆分Golang字符串?_String_Go_Split - Fatal编程技术网

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

String 如何在不删除分隔符的情况下拆分Golang字符串?,string,go,split,String,Go,Split,根据答案,拆分字符串将生成一个字符串数组,而数组中的任何字符串都不存在分隔符。有没有办法拆分字符串,使分隔符位于给定字符串的最后一行 e、 十, 产出: Potato Salad Popcorn Cheese 我希望输出以下内容: Potato: Salad: Popcorn: Cheese 我知道理论上我可以在每个元素的末尾加上“:”,但如果可能的话,我正在寻找一个更通用、更优雅的解决方案 以上daplho的答案非常简单。有时我只是想提供一种替代方法来消除函数的魔力 package mai

根据答案,拆分字符串将生成一个字符串数组,而数组中的任何字符串都不存在分隔符。有没有办法拆分字符串,使分隔符位于给定字符串的最后一行

e、 十,

产出:

Potato
Salad
Popcorn
Cheese
我希望输出以下内容:

Potato:
Salad:
Popcorn:
Cheese
我知道理论上我可以在每个元素的末尾加上“:”,但如果可能的话,我正在寻找一个更通用、更优雅的解决方案


以上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
}

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

goos: darwin
goarch: amd64
BenchmarkSplit-4             5000000           339 ns/op
BenchmarkSplitAfter-4       10000000           143 ns/op

因此,使用lol,试着得到正确的结果

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])
        }
    }
主程序包
进口(
“fmt”
“字符串”
)
func main(){
str:=“土豆:沙拉:爆米花:奶酪”
a:=strings.SplitAfter(str,“:”)
对于i:=0;i
您可以尝试搜索
,并通过索引获取子字符串,而无需使用
split()
方法。您可以使用
Regex
,因为golang是开源的,在引擎盖下一眼就可以看到SplitAfter的实现。它利用了
genSplit
功能:
goos: darwin
goarch: amd64
BenchmarkSplit-4             5000000           339 ns/op
BenchmarkSplitAfter-4       10000000           143 ns/op
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])
        }
    }