给定一个输入字符串,例如" word1 word2 word3 word4 "
,将这个作为一个字符串数组拆分在Go中的最佳方法是什么?请注意,每个单词之间可以有任意个空格或unicode-spacing字符。
在Java中,我只使用someString.trim().split("\\s+")
。
(注意:可能重复的Split string using regular expression in Go没有提供任何高质量的答案。请提供一个实际示例,而不仅仅是指向regexp
或strings
软件包参考的链接。)< / p>
答案 0 :(得分:195)
strings
包具有Fields
方法。
someString := "one two three four "
words := strings.Fields(someString)
fmt.Println(words, len(words)) // [one two three four] 4
DEMO: http://play.golang.org/p/et97S90cIH
来自文档:
func Fields(s string) []string
字段在一个或多个连续空白字符的每个实例周围分割字符串
s
,如果s仅包含空格,则返回s
的子字符串数组或空列表。
答案 1 :(得分:8)
如果您正在使用提示:regexp.Split
func (re *Regexp) Split(s string, n int) []string
将切片拆分为由表达式分隔的子串并返回 这些表达式匹配之间的一个子串。
此方法返回的切片包含所有子字符串 未包含在FindAllString返回的切片中的s。什么时候叫 在不包含元字符的表达式上,它等同于strings.SplitN。
示例:
s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]
计数确定要返回的子串数:
n > 0: at most n substrings; the last substring will be the unsplit remainder.
n == 0: the result is nil (zero substrings)
n < 0: all substrings
答案 2 :(得分:3)
我想出了以下内容,但这看起来有点过于冗长:
import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString(" word1 word2 word3 word4 ", -1)
将评估为:
[]string{"word1", "word2", "word3", "word4"}
是否有更紧凑或更惯用的表达?
答案 3 :(得分:1)
可以使用包字符串函数拆分 strings.Split(someString, " ")