首頁 >後端開發 >Golang >替換golang中字串中的字符

替換golang中字串中的字符

WBOY
WBOY轉載
2024-02-09 18:09:071247瀏覽

替換golang中字串中的字符

在golang程式設計中,替換字串中的字元是常見的操作。無論是替換單個字符還是多個字符,都可以透過使用內建的字串函數和方法來實現。在本文中,我們將由php小編新一為您介紹如何在golang中進行字串字元的替換操作。無論您是初學者還是有經驗的開發者,本文都將為您提供簡潔明了的指導,幫助您輕鬆掌握這項技巧。

問題內容

我正在嘗試替換字串陣列中的特定位置字元。我的程式碼如下所示:

package main

import (
    "fmt"
)

func main() {
    str := []string{"test","testing"}
    str[0][2] = 'y'
    fmt.Println(str)
}

現在,執行此指令會出現錯誤:

cannot assign to str[0][2]

知道如何做到這一點嗎?我嘗試過使用 strings.Replace,但據我所知,它將替換所有出現的給定字符,而我想替換該特定字符。任何幫助表示讚賞。 TIA。

解決方法

Go 中的字串是不可變的,你無法更改它們的內容。若要變更字串變數的值,您必須指派新的字串值。

一個簡單的方法是先將 string 轉換為位元組或符文切片,進行更改並轉換回來:

s := []byte(str[0])
s[2] = 'y'
str[0] = string(s)
fmt.Println(str)

這將輸出(在 Go Playground 上嘗試):

[teyt testing]

注意:我將字串轉換為 byte 切片,因為這就是您索引字串時發生的情況:它索引其位元組。 string 儲存文字的 UTF-8 位元組序列,它不一定會將位元組與字元一對一映射。

如果需要替換第二個字符,請使用 []rune 取代:

s := []rune(str[0])
s[2] = 'y'
str[0] = string(s)
fmt.Println(str)

在這個例子中,這並不重要,但一般來說可能會。

另請注意,strings.Replace() 並不會(必然)取代所有出現的情況:

func Replace(s, old, new string, n int) string

參數 n 告訴最多要執行多少次替換。因此,以下方法也有效(在 Go Playground 上嘗試):

str[0] = strings.Replace(str[0], "s", "y", 1)

另一種解決方案可能是將字串切片直到可替換字符,並從可替換字符之後的字符開始,然後將它們連接起來(在 去遊樂場):

str[0] = str[0][:2] + "y" + str[0][3:]

這裡也必須小心:切片索引是位元組索引,而不是字元(符文)索引。

查看相關問題:不可變字串和指標位址 p>#

以上是替換golang中字串中的字符的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除