如何获取从某个位置/特定偏移量开始跳过的字符串中子字符串的索引,例如:
package main
import (
"fmt"
"strings"
)
func main() {
string := "something.value=something=end"
index1 := strings.Index(string, "value=")
fmt.Println(index1) // prints 10
// index2 = ... How do I get the position of the second =, 25?
}
PHP int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
中的类似偏移量
答案 0 :(得分:2)
strings
软件包没有为您提供此类功能,但实际上很少需要。通常,strings.Split()
函数用于将字符串轻松拆分为标记/部分。
但是,如果您确实需要它:您可以简单地slice和string
{有效地进行复制(不进行复制,结果与原始string
值共享内存)。 / p>
因此,您正在寻找的功能实际上看起来像这样:
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上尝试):
10
25
请注意,在对字符串进行切片时,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]
中。
答案 1 :(得分:-1)
以utf-8字符截取字符串片段可能会产生损坏的字符串,因为您需要将其转换为符文
[]rune(videoHtml)[0:index
]