在 Go 中,字符串是不可变的,这意味着它们的内容一旦创建就无法修改。尝试更改现有字符串时,这可能会令人沮丧,但使用 fmt 包有一个简单的解决方案。
考虑以下代码:
<code class="go">package main import "fmt" func ToUpper(str string) string { new_str := str for i := 0; i < len(str); i++ { if str[i] >= 'a' && str[i] <= 'z' { chr := uint8(rune(str[i]) - 'a' + 'A') new_str[i] = chr } } return new_str } func main() { fmt.Println(ToUpper("cdsrgGDH7865fxgh")) }</code>
此代码尝试将小写字符转换为大写在字符串中,但你会遇到错误:“无法分配给 new_str[i]”。这是因为字符串是不可变的。
为了克服这个问题,我们可以将字符串转换为字节切片并进行更改:
<code class="go">func ToUpper(str string) string { new_str := []byte(str) for i := 0; i < len(str); i++ { if str[i] >= 'a' && str[i] <= 'z' { chr := uint8(rune(str[i]) - 'a' + 'A') new_str[i] = chr } } return string(new_str) }</code>
这里, []byte(str) 创建字符串中的字节切片,string(new_str) 将修改后的字节切片转换回字符串。
通过此更改,您现在可以更改字符串并将小写字符隐藏为大写:
fmt.Println(ToUpper("cdsrgGDH7865fxgh")) // Output: CDSRGgdh7865FXGH
以上是在知道 Go 中的字符串是不可变的情况下,如何修改它们?的详细内容。更多信息请关注PHP中文网其他相关文章!