代码之家  ›  专栏  ›  技术社区  ›  mrfr

替换字符串中特定位置的字符

go
  •  1
  • mrfr  · 技术社区  · 6 年前

    我知道这个方法 string.Replace() . 如果你确切地知道要替换什么和它的出现,它就会起作用。但是如果我只想在一个已知的位置替换一个字符,我该怎么办呢?我在想这样的事情:

    randLetter := getRandomChar()
    
    myText := "This is my text"
    
    randPos :=  rand.Intn(len(myText) - 1)
    
    newText := [:randPos] + randLetter + [randPos + 1:]
    

    但这并不能替换 randPos ,只需插入 randLetter 在那个位置。对吗?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Pwnstar    6 年前

    我写了一些代码来替换在 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
    }
    
        2
  •  0
  •   peterSO    6 年前

    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
    
        3
  •  0
  •   Jürgen Hötzel    6 年前

    A string 是一个只读的字节片。你不能取代任何东西。

    单身汉 Rune 可以由多个字节组成。所以你应该把 一串 (中间)可变的 Runes 无论如何:

    myText := []rune("This is my text")
    randPos := rand.Intn(len(myText) - 1)
    myText[randPos] = randLetter
    fmt.Println(string(myText))