我想生成带有循环的返回字符串函数,用于某些索引字符串


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">

因此,您基本上希望输入中的所有a都更改为A。 目前你只是检查整个字符串是否等于"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
}

另请注意,c属于rune类型,因此必须转换为带有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
}

相关内容

  • 没有找到相关文章

最新更新