为了账号安全,请及时绑定邮箱和手机立即绑定

如何将跟随者字符连接到字符串,直到在 Golang 中达到定义的最大长度?

如何将跟随者字符连接到字符串,直到在 Golang 中达到定义的最大长度?

Go
达令说 2021-12-07 16:07:23
InputOutputabc    abc___a        a___    abcdeabcde_试图package mainimport "fmt"import "unicode/utf8"func main() {    input := "abc"    if utf8.RuneCountInString(input) == 1 {        fmt.Println(input + "_____")    } else if utf8.RuneCountInString(input) == 2 {        fmt.Println(input + "____")    } else if utf8.RuneCountInString(input) == 3 {        fmt.Println(input + "___")    } else if utf8.RuneCountInString(input) == 4 {        fmt.Println(input + "__")    } else if utf8.RuneCountInString(input) == 5 {        fmt.Println(input + "_")    } else {        fmt.Println(input)    }}回报abc___讨论尽管代码正在创建预期的输出,但它看起来非常冗长和狡猾。题有没有简洁的方法?
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

字符串封装具有Repeat的功能,所以像

input += strings.Repeat("_", desiredLen - utf8.RuneCountInString(input))

会更简单。您应该首先检查它desiredLen是否小于输入长度。


查看完整回答
反对 回复 2021-12-07
?
蛊毒传说

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是有效的:


这种类似切片的字符串设计的一个重要结果是创建子字符串非常有效。所需要做的就是创建一个两个字的字符串标题。由于字符串是只读的,原始字符串和切片操作产生的字符串可以安全地共享同一个数组。


查看完整回答
反对 回复 2021-12-07
?
神不在的星期二

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。


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信