2 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
該strings
軟件包沒(méi)有為您提供這樣的功能,但實(shí)際上很少需要它。通常該strings.Split()
函數(shù)用于輕松地將字符串拆分為標(biāo)記/部分。
但是如果你確實(shí)需要它:你可以簡(jiǎn)單地切片a?string
,這是有效的(沒(méi)有復(fù)制,結(jié)果與原始string
值共享內(nèi)存)。
如此有效,您正在尋找的功能將如下所示:
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
請(qǐng)注意,在對(duì)字符串進(jìn)行切片時(shí),offset
您必須傳遞給我們的Index()
函數(shù)的是字節(jié)索引,而不是rune
(字符)索引。只要您的字符小于128
代碼點(diǎn),它們就相等,但除此之外,字節(jié)索引將大于索引,rune
因?yàn)檫@些代碼點(diǎn)映射到 UTF-8 編碼中的多個(gè)字節(jié)(Go 在內(nèi)存中存儲(chǔ)字符串的方式)。strings.Index()
返回字節(jié)索引,還len(s)
返回字節(jié)長(zhǎng)度,因此該示例將正確處理所有字符串。
您使用的原始任務(wù)strings.Split()
可能如下所示:
s?:=?"something.value=something=end" parts?:=?strings.Split(s,?"=") fmt.Println(parts)
哪些輸出(在Go Playground上嘗試):
[something.value?something?end]
您要“解析”出的值在parts[1]
.

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
取一段帶有 utf-8 字符的字符串可能會(huì)產(chǎn)生損壞的字符串,因?yàn)槟枰獙⑵滢D(zhuǎn)換為符文
[]rune(videoHtml)[0:index
]
- 2 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)