3 回答

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

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
您還可以通過切片準(zhǔn)備好的“最大填充”(切出所需的填充并將其添加到輸入中)來有效地執(zhí)行此操作,而無需循環(huán)和“外部”函數(shù)調(diào)用:
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)是常數(shù)(因?yàn)閙ax是常數(shù)):規(guī)格:長(zhǎng)度和容量:
表達(dá)len(s)是常數(shù),如果s是字符串常量。
切片 astring是有效的:
這種類似切片的字符串設(shè)計(jì)的一個(gè)重要結(jié)果是創(chuàng)建子字符串非常有效。所需要做的就是創(chuàng)建一個(gè)兩個(gè)字的字符串標(biāo)題。由于字符串是只讀的,原始字符串和切片操作產(chǎn)生的字符串可以安全地共享同一個(gè)數(shù)組。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
你可以input += "_"在一個(gè)循環(huán)中完成,但這會(huì)分配不必要的字符串。這是一個(gè)不會(huì)分配超過其需要的版本:
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)
}
游樂場(chǎng):http : //play.golang.org/p/B_Wx1449QM。
- 3 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報(bào)