Go语言 我想生成一个返回字符串函数,对某个索引字符串进行循环

4si2a6ki  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(143)
func change(a string) string {
    // fmt.Println(a)
    v := ""
    if string(a) == "a" {
        return "A"
        v += a
    }
    return ""
}

func main() {
    fmt.Println(change("a"))
    fmt.Println(change("ab"))

}

我是Go和编程的新手,实际上,现在的输出是A,但为什么当我将变量值更改为“ab”时,它不会返回任何值,输出必须是“Ab”

oprakyz7

oprakyz71#

所以,你基本上想把输入中的所有a都改成A。现在你只需要检查 whole 字符串是否等于"a",以及"ab"是否不等于"a"。因此,在第二种情况下,程序以return ""结束。
通常情况下,您可以使用strings.ReplaceAll("abaaba","a","A")之类的工具来实现您想要的功能。

func change(a string) string {
    v := "" // our new string, we construct it step by step
    for _, c := range a { // loop over all characters
        if c != 'a' { // in case it's not an "a" ...
            v += string(c) // ... just append it to the new string v
        } else {
            v += "A" // otherwise append an "A" to the new string v
        }
    }
    return v
}

另请注意,crune类型,因此必须使用string(c)转换为string
编辑:正如在注解中所指出的,实际上这并不是构造新string的最佳方法。除了从runestring的转换的麻烦之外,我们每次添加一些内容并丢弃旧的内容时都会创建一个新的string。相反,我们希望只创建一次string-在最后。当我们确切地知道结果string应该是什么样子的时候。因此,我们应该使用一个字符串构建器来代替。为了避免混淆,这里有一个单独的例子:

func change(a string) string {
    var resultBuilder strings.Builder
    for _, c := range a { // loop over all characters
        if c != 'a' { // in case it's not an "a" ...
            resultBuilder.WriteRune(c) // ... just append it to the new string v
        } else {
            resultBuilder.WriteString("A") // otherwise append an "A" to the new string v
        }
    }
    return resultBuilder.String() // Create the final string once everything is set
}

相关问题