Python peut multiplier des chaînes comme ceci:
Python 3.4.3 (default, Mar 26 2015, 22:03:40)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 'my new text is this long'
>>> y = '#' * len(x)
>>> y
'########################'
>>>
Golang peut-il faire l'équivalent d'une manière ou d'une autre?
Il a une fonction au lieu d'un opérateur, strings.Repeat
. Voici un port de votre Python, que vous pouvez exécuter ici :
package main
import (
"fmt"
"strings"
"unicode/utf8"
)
func main() {
x := "my new text is this long"
y := strings.Repeat("#", utf8.RuneCountInString(x))
fmt.Println(x)
fmt.Println(y)
}
Notez que j'ai utilisé utf8.RuneCountInString(x)
au lieu de len(x)
; le premier compte les "runes" (points de code Unicode), tandis que le dernier compte les octets. Dans le cas de "my new text is this long"
, La différence n'a pas d'importance puisque tous les caractères ne sont qu'un octet, mais il est bon de prendre l'habitude de spécifier ce que vous voulez dire:
len("ā") //=> 2
utf8.RuneCountInString("ā") //=> 1
(In Python 2, len
compte les octets sur les chaînes simples et les runes sur les chaînes Unicode (u'...'
)):
>>> len('ā') #=> 2
>>> len(u'ā') #=> 1
Dans Python 3, les chaînes simples sont les chaînes Unicode et len
compte les runes; si vous voulez compter les octets, vous devez d'abord encoder la chaîne en bytearray
:
>>> len('ā') #=> 1
>>> len('ā'.encode('utf-8')) #=> 2
Dans Go, il n'y a qu'un seul type de chaîne. Vous n'avez donc pas à convertir, mais vous devez choisir la fonction qui correspond à la sémantique souhaitée.)
Oui, c'est possible, mais pas avec un opérateur mais avec une fonction dans la bibliothèque standard.
Ce serait très facile avec une simple boucle, mais la bibliothèque standard vous en fournit une version hautement optimisée: strings.Repeat()
.
Votre exemple:
x := "my new text is this long"
y := strings.Repeat("#", len(x))
fmt.Println(y)
Essayez-le sur le Go Playground .
Remarques: len(x)
est la longueur "octets" (nombre d'octets) de la chaîne (dans le codage UTF-8, c'est ainsi que Go stocke les chaînes en mémoire). Si vous voulez le nombre de caractères (runes), utilisez utf8.RuneCountInString()
.
Ouaip. Le package de chaînes a une fonction Repeat
.