Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何找到跳过N个字符的子字符串_String_Go - Fatal编程技术网

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
]

只需将字符串分片即可。也许会有帮助,但我不知道您期望的结果是什么。你想知道每个
=
在字符串中的位置吗?只需对字符串进行二次切片。也许会有帮助,但我真的不知道你期望的结果是什么。您想知道字符串中每个
=
的位置吗?