Scinde une chaîne en fonction de la longueur de Golang
Personne ne sait comment découper une chaîne en Golang en longueur?
Par exemple à diviser "helloworld" après tous les 3 personnages, donc idéalement, il devrait retourner un tableau de "hel" "faible" "orl" "d"?
Sinon, une solution possible serait d'ajouter un saut de ligne après chaque 3 caractères..
Toutes les idées sont grandement appréciés!
- Eh bien, certains de programmation pourrait il m'aider? Comme
s[n:n+3]+"\n"
?
Vous devez vous connecter pour publier un commentaire.
Assurez-vous de convertir votre chaîne dans une tranche de rune: voir "Tranche chaîne en lettres"
a[n:n+3]
fonctionne le mieux avec un être d'une tranche de rune.L'indice augmentera par un chaque rune, alors qu'il aurait augmenter de plus d'un pour chaque octet dans un tranche de chaîne: "世界":
i
0 et 3: un personnage (rune) peut être formé de plusieurs octets.Par exemple, considérons
s := "世a界世bcd界efg世"
: 12 runes. (voir play.golang.org)Si vous essayez d'analyser octet par octet, vous passerez à côté (dans un naïf split tous les 3 caractères de mise en œuvre) une partie de la "index modulo 3" (égal à 2, 5, 8 et 11), parce que l'indice augmentera au-delà de ces valeurs:
La sortie:
Mais si vous étiez à itérer sur les runes (
a := []rune(s)
), vous obtenez ce que vous attendez, comme l'index de l'augmentation d'une rune à un moment, le rendant facile pour agréger exactement 3 caractères:De sortie:
Aussi besoin d'une fonction pour le faire récemment, voir exemple d'utilisation ici
Voici un autre exemple (vous pouvez l'essayer ici):
J'ai essayé la version 3 pour mettre en œuvre la fonction, la fonction nommée "splitByWidthMake" est la plus rapide.
Ces fonctions ignorer l'unicode, mais seulement le code ascii.
Une solution facile en utilisant les regex
re := regexp.MustCompile(
(\S{3})
)x := re.FindAllStringSubmatch("HelloWorld", -1)
fmt.Println(x)
https://play.golang.org/p/mfmaQlSRkHe
FindAllString
au lieu deFindAllStringSubmatch
, non?