给定一个输入字符串(如 " word1 word2 word3 word4 ") ,在 Go 中将其拆分为字符串数组的最佳方法是什么?注意,每个单词之间可以有 任何数量的空格或 unicode 间距字符。
" word1 word2 word3 word4 "
在 Java 中,我只使用 someString.trim().split("\\s+")。
someString.trim().split("\\s+")
(注意: 可能重复的 在 Go 中使用正则表达式拆分字符串没有给出任何好的质量答案。请提供一个实际的例子,而不仅仅是一个到 regexp或 strings包参考的链接。)
regexp
strings
我想到了以下几点,但这似乎有点太冗长了:
import "regexp" r := regexp.MustCompile("[^\\s]+") r.FindAllString(" word1 word2 word3 word4 ", -1)
评估结果为:
[]string{"word1", "word2", "word3", "word4"}
有没有更紧凑或更惯用的表达方式?
strings包有一个 Fields方法。
Fields
someString := "one two three four " words := strings.Fields(someString) fmt.Println(words, len(words)) // [one two three four] 4
演示: http://play.golang.org/p/et97s90cih
来自文件:
如 unicode.IsSpace 所定义的,字段将一个或多个连续的空白字符的每个实例周围的字符串 s 分割,如果 s 只包含空白字符,则返回一个 s 的子字符串片或一个空片。
如果你使用提示: Regexp 分裂
func (re *Regexp) Split(s string, n int) []string
将切片拆分为由表达式分隔的子字符串并返回 这些表达式之间匹配的子字符串片。
此方法返回的片由所有子字符串组成 不包含在 FindAllString 返回的片中 对于不包含元字符的表达式,它等效于字符串。
例如:
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
可以使用包字符串函数拆分 拆分(some String,“”)
绳子,分开