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 关注
- 141 浏览
添加回答
举报