2 回答

TA貢獻1811條經驗 獲得超4個贊
索引 astring索引其字節(以 UTF-8 編碼 - 這是 Go 在內存中存儲字符串的方式),但您想測試第一個字符。
所以你應該得到第一個rune而不是第一個byte。為了提高效率,您可以使用utf8.DecodeRuneInString()which 只解碼第一個rune. 如果你需要所有的符文string,你可以使用像all := []rune("I'm a string").
看這個例子:
for _, s := range []string{"asdf", ".asdf", "”asdf"} {
c, _ := utf8.DecodeRuneInString(s)
if c != '.' && c != ',' && c != '?' && c != '“' && c != '”' {
fmt.Println("Ok:", s)
} else {
fmt.Println("Not ok:", s)
}
}
輸出(在Go Playground上試試):
Ok: asdf
Not ok: .asdf
Not ok: ”asdf

TA貢獻1852條經驗 獲得超7個贊
值得注意的是,雖然字符串的索引以字節為單位,但range字符串的索引以符文為單位。所以以下也有效:
for _, s := range []string{"asdf", ".asdf", "”asdf"} {
for _, c := range s {
if c != '.' && c != ',' && c != '?' && c != '“' && c != '”' {
fmt.Println("Ok:", s)
} else {
fmt.Println("Not ok:", s)
}
break // we break after the first character regardless
}
}
- 2 回答
- 0 關注
- 222 瀏覽
添加回答
舉報