150 votes

Découper une chaîne sur les espaces en Aller?

Étant donné une chaîne d'entrée tels que " word1 word2 word3 word4 ", quelle serait la meilleure approche pour diviser ce qu'un tableau de chaînes de caractères dans le jeu de Go? Notez qu'il peut être tout nombre de places ou unicode des caractères d'espacement entre chaque mot.

En Java, je voudrais juste utiliser someString.trim().split("\\s+").

(Remarque: il est possible de dupliquer scinde une chaîne en utilisant l'expression régulière dans le jeu de Go n'est pas de bonne qualité de réponse. Veuillez fournir un exemple réel, pas juste un lien vers l' regexp ou strings des paquets de référence.)

319voto

I Hate Lazy Points 18168

L' strings paquet a un Fields méthode.

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

À partir de la documentation:

func Fields(s string) []string

Les champs de coupe la corde s autour de chaque instance d'un ou de plusieurs caractères d'espace blancs consécutifs, renvoyant un tableau de sous-chaînes d' s ou une liste vide si s ne contient que des blancs de l'espace.

11voto

zzzz Points 23017

Si vous êtes à l'aide de la pointe: regexp.Split

func (re *Regexp) Split(s string, n int) []string

Split tranches de s en sous-chaînes séparées par l'expression et renvoie une tranche de la chaˆ ıne entre ces correspondances d'expression.

La tranche retourné par cette méthode se compose de toutes les sous-chaînes de la s n'est pas contenue dans la tranche retourné par FindAllString. Lorsqu'il est appelé sur une expression qui ne contient pas de caractères de remplacement, c'est équivalent à des cordes.SplitN.

Exemple:

s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]

Le comte détermine le nombre de sous-chaînes à retourner:

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

6voto

ralfoide Points 430

Je suis venu avec la suite, mais cela semble un peu trop verbeux:

import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString("  word1   word2 word3   word4  ", -1)

ce qui donnera:

[]string{"word1", "word2", "word3", "word4"}

Est-il plus compact ou plus idiomatique expression?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X