3 回答

TA貢獻1871條經驗 獲得超13個贊
該字符串封裝具有Repeat
的功能,所以像
input += strings.Repeat("_", desiredLen - utf8.RuneCountInString(input))
會更簡單。您應該首先檢查它desiredLen
是否小于輸入長度。

TA貢獻1895條經驗 獲得超3個贊
您還可以通過切片準備好的“最大填充”(切出所需的填充并將其添加到輸入中)來有效地執行此操作,而無需循環和“外部”函數調用:
const max = "______"
func pad(s string) string {
if i := utf8.RuneCountInString(s); i < len(max) {
s += max[i:]
}
return s
}
使用它:
fmt.Println(pad("abc"))
fmt.Println(pad("a"))
fmt.Println(pad("abcde"))
輸出(在Go Playground上試試):
abc___
a_____
abcde_
筆記:
len(max)是常數(因為max是常數):規格:長度和容量:
表達len(s)是常數,如果s是字符串常量。
切片 astring是有效的:
這種類似切片的字符串設計的一個重要結果是創建子字符串非常有效。所需要做的就是創建一個兩個字的字符串標題。由于字符串是只讀的,原始字符串和切片操作產生的字符串可以安全地共享同一個數組。

TA貢獻1963條經驗 獲得超6個贊
你可以input += "_"在一個循環中完成,但這會分配不必要的字符串。這是一個不會分配超過其需要的版本:
const limit = 6
func f(s string) string {
if len(s) >= limit {
return s
}
b := make([]byte, limit)
copy(b, s)
for i := len(s); i < limit; i++ {
b[i] = '_'
}
return string(b)
}
游樂場:http : //play.golang.org/p/B_Wx1449QM。
- 3 回答
- 0 關注
- 198 瀏覽
添加回答
舉報