String 如何找到跳过N个字符的子字符串
如何获取从某个位置/某个偏移量开始跳过的字符串中的子字符串的索引,例如:String 如何找到跳过N个字符的子字符串,string,go,String,Go,如何获取从某个位置/某个偏移量开始跳过的字符串中的子字符串的索引,例如: package main import ( "fmt" "strings" ) func main() { string := "something.value=something=end" index1 := strings.Index(string, "value=") fmt.Println(index1) // prints 10 // index2 = ...
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中类似的偏移量intstrpos(字符串$haystack,mixed$needle[,int$offset=0])
该软件包不提供此类功能,但实际上很少需要它。该函数通常用于轻松地将字符串拆分为标记/部分
但是如果您确实需要它:您可以简单地使用一个字符串
,这非常有效(不复制,结果与原始字符串
值共享内存)
因此,实际上,您正在寻找的函数如下所示:
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"
parts := strings.Split(s, "=")
fmt.Println(parts)
输出(在上尝试):
请注意,在切片字符串时,必须传递给Index()
函数的偏移量是字节索引,而不是符文
(字符)索引。只要您的字符小于128
码点,它们就相等,但超过这一点,字节索引将大于rune
索引,因为这些码点在UTF-8编码中映射到多个字节(这是Go在内存中存储字符串的方式)strings.Index()
使用strings.Split()
的原始任务可能如下所示:
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"
parts := strings.Split(s, "=")
fmt.Println(parts)
哪些输出(在上尝试):
您想要“解析”出来的值在部分[1]
中。该包不提供此类功能,但实际上很少需要它。该函数通常用于轻松地将字符串拆分为标记/部分
但是如果您确实需要它:您可以简单地使用一个字符串
,这非常有效(不复制,结果与原始字符串
值共享内存)
因此,实际上,您正在寻找的函数如下所示:
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"
parts := strings.Split(s, "=")
fmt.Println(parts)
输出(在上尝试):
请注意,在切片字符串时,必须传递给Index()
函数的偏移量是字节索引,而不是符文
(字符)索引。只要您的字符小于128
码点,它们就相等,但超过这一点,字节索引将大于rune
索引,因为这些码点在UTF-8编码中映射到多个字节(这是Go在内存中存储字符串的方式)strings.Index()
使用strings.Split()
的原始任务可能如下所示:
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"
parts := strings.Split(s, "=")
fmt.Println(parts)
哪些输出(在上尝试):
要“解析”出来的值位于部分[1]
中,在需要将其转换为符文时,获取一段utf-8字符的字符串可能会产生损坏的字符串
[]符文(videoHtml)[0:index
]在需要将其转换为符文时,使用utf-8字符的字符串片段可能会产生损坏的字符串
[]符文(videoHtml)[0:index
]只需将字符串分片即可。也许会有帮助,但我不知道您期望的结果是什么。你想知道每个=
在字符串中的位置吗?只需对字符串进行二次切片。也许会有帮助,但我真的不知道你期望的结果是什么。您想知道字符串中每个=
的位置吗?