Golang:如何从字符串中替换第n个字符

Pan*_*nar 7 string replace go

我想从原始字符串中替换第n个字符,我可以使用字符[i]从字符串中访问第n个字符,但是当我为chars [i]赋值时,它会给出错误.

package main
import "fmt"

func main() {
  var chars = "abcdef"
  fmt.Println(string(chars[3]))
  chars[3] = "z" // is not working, 
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*aaz 11

字符串是不可变的.

chars = chars[:3] + "z" + chars[4:]
Run Code Online (Sandbox Code Playgroud)


eva*_*nal 9

发生这种情况是因为chars它实际上是一个字符串并且是不可变的.如果您正确地声明它(作为字节切片),那么您可以在尝试时将其分配给它.这是一个例子;

package main
import "fmt"

func main() {
  var chars = []byte{'a', 'b', 'c', 'd', 'e', 'f'}
  fmt.Println(string(chars[3]))
  fmt.Printf("%T\n", chars)
  chars[3] = 'z'
  fmt.Println(string(chars))
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/N1sSsfIBQY

或者,您可以使用其他答案中所示的重新分析.

  • 请注意,这不适用于 Unicode 字符串,因为字符可能使用多个字节。使用 []rune 而不是 []byte。 (2认同)