3 回答

TA貢獻1844條經(jīng)驗 獲得超8個贊
Go 將字符串作為 UTF-8 編碼的字節(jié)序列存儲在內(nèi)存中。這會以字節(jié)為單位一對一地映射 ASCII 字符,但超出該范圍的字符會映射到多個字節(jié)。
所以我建議在字符串上使用循環(huán),該for range
循環(huán)覆蓋字符串的符文(字符),正確解碼多字節(jié)符文。這樣做的好處是它不需要分配(與將 轉(zhuǎn)換為 不同string
)[]rune
。您也可以使用 打印對fmt.Printf("%c%c", char1, char2)
,這也不需要分配(與將rune
s 轉(zhuǎn)換回string
并連接它們不同)。
要了解有關(guān) Go 中的字符串、字符和符文的更多信息,請閱讀博客文章:Go 中的字符串、字節(jié)、符文和字符
由于循環(huán)僅返回迭代中的“當(dāng)前”符文(而不是前一個或下一個符文),因此使用另一個變量來存儲前一個(和第一個)符文,以便在打印時可以訪問它們。
讓我們編寫一個函數(shù),根據(jù)需要打印對:
func printPairs(s string) {
var first, prev rune
for i, r := range s {
if i == 0 {
first, prev = r, r
continue
}
fmt.Printf("%c%c, ", prev, r)
prev = r
}
// Print last pair: prev is the last rune
fmt.Printf("%c%c\n", prev, first)
}
使用您的輸入和另一個具有多字節(jié)符文的字符串對其進行測試:
printPairs("p1k4")
printPairs("Go-世界")
輸出將是(在Go Playground上嘗試):
p1, 1k, k4, 4p
Go, o-, -世, 世界, 界G

TA貢獻1784條經(jīng)驗 獲得超2個贊
package main
import (
"fmt"
)
func main() {
str := "12345"
for i := 0; i < len(str); i++ {
fmt.Println(string(str[i]) + string(str[(i+1)%len(str)]))
}
}

TA貢獻1827條經(jīng)驗 獲得超4個贊
這是對字符串的簡單 for 循環(huán),第一個字符附加在后面:
package main
import "fmt"
func main() {
some := "p1k4"
ns := some + string(some[0])
for i := 0; i < len(ns)-1; i++ {
fmt.Println(ns[i:i+2])
}
}
- 3 回答
- 0 關(guān)注
- 205 瀏覽
添加回答
舉報