2016-06-07 280 views
3

我想從原始字符串中替換第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, 
} 

回答

7

發生這種情況是因爲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

非常感謝你,現在有意義:) –

5

字符串是不可變的。

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

謝謝你的答案,+1「字符串是不可變的」 –

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函數。