2 回答

TA貢獻1860條經驗 獲得超9個贊
該strings
軟件包沒有為您提供這樣的功能,但實際上很少需要它。通常該strings.Split()
函數用于輕松地將字符串拆分為標記/部分。
但是如果你確實需要它:你可以簡單地切片a?string
,這是有效的(沒有復制,結果與原始string
值共享內存)。
如此有效,您正在尋找的功能將如下所示:
func Index(s, substr string, offset int) int {
? ? if len(s) < offset {
? ? ? ? return -1
? ? }
? ? if idx := strings.Index(s[offset:], substr); idx >= 0 {
? ? ? ? return offset + idx
? ? }
? ? return -1
}
使用它的例子:
s := "something.value=something=end"
index1 := strings.Index(s, "value=")
fmt.Println(index1) // prints 10
index2 := Index(s, "=", index1+len("value="))
fmt.Println(index2) // prints 25
輸出(在Go Playground上嘗試):
1025
請注意,在對字符串進行切片時,offset
您必須傳遞給我們的Index()
函數的是字節索引,而不是rune
(字符)索引。只要您的字符小于128
代碼點,它們就相等,但除此之外,字節索引將大于索引,rune
因為這些代碼點映射到 UTF-8 編碼中的多個字節(Go 在內存中存儲字符串的方式)。strings.Index()
返回字節索引,還len(s)
返回字節長度,因此該示例將正確處理所有字符串。
您使用的原始任務strings.Split()
可能如下所示:
s?:=?"something.value=something=end" parts?:=?strings.Split(s,?"=") fmt.Println(parts)
哪些輸出(在Go Playground上嘗試):
[something.value?something?end]
您要“解析”出的值在parts[1]
.
- 2 回答
- 0 關注
- 139 瀏覽
添加回答
舉報