根据How to split a string and assign it to variables in Golang?处的答案,分割字符串会生成一个字符串数组,其中该数组的任何字符串中都没有分隔符。有没有一种方法可以分割字符串,使分隔符位于给定字符串的最后一行?
e.x。
(defproject gn-preview-api "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.9.0"]]
:main gn-preview-api.www.app
:target-path "target/%s"
:profiles {:uberjar {:aot :all}
:staging {:aot :all}
:live {:aot :all}
:dev {:plugins [[lein-ring "0.9.7"]]
:dependencies [[javax.servlet/servlet-api "2.5"]]}})
输出:
s := strings.split("Potato:Salad:Popcorn:Cheese", ":")
for _, element := range s {
fmt.Printf(element)
}
我希望输出以下内容:
Potato
Salad
Popcorn
Cheese
我知道从理论上讲,我可以在每个元素的末尾附加“:”,但如果可能的话,我正在寻找更通用,更优雅的解决方案。
答案 0 :(得分:7)
您正在寻找SplitAfter。
s := strings.SplitAfter("Potato:Salad:Popcorn:Cheese", ":")
for _, element := range s {
fmt.Println(element)
}
// Potato:
// Salad:
// Popcorn:
// Cheese
答案 1 :(得分:1)
尝试此操作以获得正确的结果。
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])
}
}
答案 2 :(得分:0)
以上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
那么就笑吧