Étant donné une chaîne d'entrée telle que " Word1 Word2 Word3 Word4 "
, Quelle serait la meilleure approche pour scinder cela en un tableau de chaînes dans Go? Notez qu'il peut y avoir n'importe quel nombre d'espaces ou de caractères d'espacement Unicode entre chaque mot.
Dans Java je voudrais simplement utiliser someString.trim().split("\\s+")
].
(Remarque: les doublons possibles Scinder une chaîne en utilisant une expression rationnelle dans Go ne donne aucune réponse de bonne qualité. Veuillez fournir un exemple concret, et pas seulement un lien vers le regexp
ou strings
référence des paquets.)
Le paquetage strings
a une méthode Fields
.
someString := "one two three four "
words := strings.Fields(someString)
fmt.Println(words, len(words)) // [one two three four] 4
DÉMO: http://play.golang.org/p/et97S90cIH
De la docs:
func Fields(s string) []string
Fields divise la chaîne
s
autour de chaque occurrence d’un ou plusieurs caractères d’espace blanc consécutifs et renvoie un tableau de sous-chaînes des
ou une liste vide si s ne contient que des espaces.
Si vous utilisez tip: regexp.Split
func (re *Regexp) Split(s string, n int) []string
Fractionnez les tranches en sous-chaînes séparées par l'expression et renvoie une tranche des sous-chaînes entre ces correspondances d'expression.
La tranche renvoyée par cette méthode est constituée de toutes les sous-chaînes de s non contenues dans la tranche renvoyée par FindAllString. Lorsqu'elle est appelée dans une expression ne contenant pas de métacaractères, elle équivaut à strings.SplitN.
Exemple:
s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]
Le nombre détermine le nombre de sous-chaînes à renvoyer:
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
Je suis venu avec ce qui suit, mais cela semble un peu trop verbeux:
import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString(" Word1 Word2 Word3 Word4 ", -1)
qui évaluera à:
[]string{"Word1", "Word2", "Word3", "Word4"}
Existe-t-il une expression plus compacte ou plus idiomatique?