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