2015-10-15 28 views
21

Python可以繁殖的字符串,像這樣:Golang能像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莫名其妙地做相同呢?

回答

38

它有一個功能,而不是一個操作員,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(y) 
} 

請注意,我用utf8.RuneCountInString(x)代替len(x);前者統計「符文」(Unicode代碼點),而後者統計字節數。在"my new text is this long"的情況下,差異並不重要,因爲所有字符只有一個字節,但是養成指定你的意思的習慣是很好的。

(在Python 2,對Unicode字符串普通字符串和符文(u'...')在Python 3,普通字符串 Unicode字符串和len計數符文len數字節;如果你想算個字節,你必須首先將字符串編碼爲bytearray,在Go中,只有一種字符串,不需要轉換,但必須選擇符合所需語義的函數。)

+1

瞭解符文在重要的,很好的答案。 – cerberos

7

是的,它可以,雖然不是用操作符,而是用標準庫中的函數。

使用簡單的循環會很容易,但標準庫爲您提供高度優化的版本: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()

相關問題