Разделить строку на пробелы в Go?
Учитывая входную строку, такую как " word1 word2 word3 word4 "
, какой был бы лучший подход к ее разбиению как массива строк в Go? Обратите внимание, что между каждым словом может быть любое количество пробелов или символов между символами unicode.
В Java я бы просто использовал someString.trim().split("\\s+")
.
(Примечание: возможный дубликат Разделение строки с использованием регулярного выражения в Go не дает никакого качественного ответа. Просьба представить фактический пример, а не только ссылку на regexp
или strings
.)
Ответы
Ответ 1
В пакете 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 содержит только пробел.
Ответ 2
Если вы используете подсказку: regexp.Split
func (re *Regexp) Split(s string, n int) []string
Разделить срезы s на подстроки, разделенные выражением, и возвращает
фрагмент подстрок между этими выражениями совпадает.
Ломтик, возвращаемый этим методом, состоит из всех подстрок
s не содержится в срезе, возвращаемом FindAllString. Когда вызывается
на выражение, которое не содержит метасимволов, оно эквивалентно строкам .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
Ответ 3
Я придумал следующее, но это кажется слишком многословным:
import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString(" word1 word2 word3 word4 ", -1)
который будет оцениваться следующим образом:
[]string{"word1", "word2", "word3", "word4"}
Существует ли более компактное или более идиоматическое выражение?