2 回答

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
你遇到了符文在圍棋和字節(jié)中的差異。字符串由字節(jié)組成,而不是符文。如果您尚未了解這一點,則應(yīng)閱讀 https://blog.golang.org/strings。
這是我的快速函數(shù)版本,用于計算字符串中子字符串的最后一個匹配之前的符文數(shù)?;痉椒ㄊ钦业阶止?jié)索引,然后循環(huán)訪問/計數(shù)字符串符文,直到該字節(jié)數(shù)被消耗。
我不知道有哪個標(biāo)準(zhǔn)庫方法可以直接執(zhí)行此操作。
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貢獻(xiàn)2080條經(jīng)驗 獲得超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)
但我得到這個結(jié)果:
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 關(guān)注
- 99 瀏覽
添加回答
舉報