在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中文網其他相關文章!