2 回答

TA貢獻1872條經驗 獲得超4個贊
你遇到了符文在圍棋和字節中的差異。字符串由字節組成,而不是符文。如果您尚未了解這一點,則應閱讀 https://blog.golang.org/strings。
這是我的快速函數版本,用于計算字符串中子字符串的最后一個匹配之前的符文數?;痉椒ㄊ钦业阶止澦饕缓笱h訪問/計數字符串符文,直到該字節數被消耗。
我不知道有哪個標準庫方法可以直接執行此操作。
package main
import (
"fmt"
"strings"
)
func LastRuneIndex(s, substr string) (int, error) {
byteIndex := strings.LastIndex(s, substr)
if byteIndex < 0 {
return byteIndex, nil
}
reader := strings.NewReader(s)
count := 0
for byteIndex > 0 {
_, bytes, err := reader.ReadRune()
if err != nil {
return 0, err
}
byteIndex = byteIndex - bytes
count += 1
}
return count, nil
}
func main() {
s := "foo 日本 foo!"
count, err := LastRuneIndex(s, "foo")
fmt.Println(count, err)
// outputs:
// 7 <nil>
}

TA貢獻2080條經驗 獲得超4個贊
這變得非常接近:
package main
import (
"golang.org/x/text/language"
"golang.org/x/text/search"
)
func main() {
m := search.New(language.English)
start, end := m.IndexString("foo 日本 foo!", "foo")
println(start == 0, end == 3)
}
但它正在向前搜索。我試過這個:
m.IndexString("foo 日本 foo!", "foo", search.Backwards)
但我得到這個結果:
panic: TODO: implement
https://pkg.go.dev/golang.org/x/text/search
https://github.com/golang/text/blob/v0.3.6/search/search.go#L222-L223
- 2 回答
- 0 關注
- 103 瀏覽
添加回答
舉報