我知道方法string.Replace()
。如果您确切知道要替换的内容及其出现,它就会起作用。但是如果我想在一个已知位置替换一个字符,我该怎么办?我想到这样的事情:
randLetter := getRandomChar()
myText := "This is my text"
randPos := rand.Intn(len(myText) - 1)
newText := [:randPos] + randLetter + [randPos + 1:]
但是这不会替换randPos
处的字符,只需在该位置插入randLetter
即可。正确?
答案 0 :(得分:1)
我编写了一些代码,将indexofcharacter
处的字符替换为replacement
。我可能不是最好的方法,但是效果很好。
https://play.golang.org/p/9CTgHRm6icK
func replaceAtPosition(originaltext string, indexofcharacter int, replacement string) string {
runes := []rune(originaltext )
partOne := string(runes[0:indexofcharacter-1])
partTwo := string(runes[indexofcharacter:len(runes)])
return partOne + replacement + partTwo
}
答案 1 :(得分:0)
UTF-8是一种可变长度编码。例如,
package main
import "fmt"
func insertChar(s string, c rune, i int) string {
if i >= 0 {
r := []rune(s)
if i < len(r) {
r[i] = c
s = string(r)
}
}
return s
}
func main() {
s := "Hello, 世界"
fmt.Println(s)
s = insertChar(s, 'X', len([]rune(s))-1)
fmt.Println(s)
}
输出:
Hello, 世界
Hello, 世X
答案 2 :(得分:0)
string
是一个只读的字节切片。你不能替换任何东西。
单个Rune
可以包含多个字节。因此,无论如何,您应该将string
转换为Runes
的(中间)可变切片:
myText := []rune("This is my text")
randPos := rand.Intn(len(myText) - 1)
myText[randPos] = randLetter
fmt.Println(string(myText))