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 关注
- 92 浏览
添加回答
举报