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

问题描述:

我想从原始字符串中替换第n个字符,我可以通过使用字符[i]来访问字符串中的第n个字符,但是当我为字符赋值时[it]它给出错误。Golang:如何从字符串中替换第n个字符

package main 
import "fmt" 

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

发生这种情况是因为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)) 
} 

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

或者在对方的回答证明,你可以使用reslicing。

+0

谢谢你的解释和非常好的答案,这就是我正在寻找的。但我需要将我的字符串转换为字节数组? –

+1

@PankajKhairnar是啊这里有另一个例子,这样做...... https://play.golang.org/p/M_Gb1_bVCs基本上,如果你是一个字符串's',你可以'myBytes:= [] byte(s)'' – evanmcdonnal

+0

非常感谢你,现在有意义:) –

字符串是不可变的。

chars = chars[:3] + "z" + chars[4:] 
+0

谢谢你的答案,+1“字符串是不可变的” –

使用切片索引来删除索引处的字符,并在其中放置新字符。

package main 
import "fmt" 

func main() { 
    var chars = "abcdef" 
    fmt.Println(string(chars[3])) 
    chars = chars[:3] + "z" + chars[3+1:] 
    fmt.Println(string(chars[3])) 
} 

输出:选择一切从指数(3 + 1),直到:

d 
z 

[:3]从开始直到索引3,和[3 + 1]中选择的切片的一切切片的结尾。把你想要的角色放在两条语句之间,并把它们放在一起,以取代特定索引处字符的效果。

如果要替换特定字符(即字母'b'的所有(或部分)实例),可以使用strings.Replace函数。