Pythonは次のように文字列を乗算できます。
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は何とか同等のことを行うことができますか?
演算子 _strings.Repeat
_ の代わりに関数があります。 Pythonの例のポートです。これを実行できます here :
_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)
}
_
utf8.RuneCountInString(x)
の代わりに len(x)
を使用したことに注意してください。前者は「ルーン」(Unicodeコードポイント)をカウントし、後者はバイトをカウントします。 _"my new text is this long"
_の場合、すべての文字が1バイトしかないため、違いは重要ではありませんが、意味を指定する習慣を身に付けるのは良いことです。
_len("ā") //=> 2
utf8.RuneCountInString("ā") //=> 1
_
(Python 2、 len
では、プレーン文字列のバイト数をカウントし、Unicode文字列のルーン文字をカウントします(_u'...'
_):
_>>> len('ā') #=> 2
>>> len(u'ā') #=> 1
_
Python 3、プレーン文字列areUnicode文字列と len
ルーンを数えます;バイトを数えたいなら、文字列を bytearray
にエンコードする必要があります:
_>>> len('ā') #=> 1
>>> len('ā'.encode('utf-8')) #=> 2
_
Goには、1種類の文字列しかありません。したがって、変換する必要はありませんが、必要なセマンティクスに一致する関数を選択する必要があります。
はい、できますが、演算子ではなく、標準ライブラリの関数を使用できます。
単純なループでは非常に簡単ですが、標準ライブラリでは高度に最適化されたバージョン strings.Repeat()
が提供されます。
あなたの例:
_x := "my new text is this long"
y := strings.Repeat("#", len(x))
fmt.Println(y)
_
Go Playground で試してください。
注:len(x)
は、文字列の「バイト」長(バイト数)です(UTF-8エンコーディングでは、Goが文字列をメモリに格納する方法です)。文字数(ルーン文字)が必要な場合は、 utf8.RuneCountInString()
を使用します。
うん。文字列パッケージには Repeat
関数 があります。