当前位置: 首页 > 知识库问答 >
问题:

如何查找跳过 N 个字符的子字符串

艾翼
2023-03-14

如何获取从特定位置/具有特定偏移量开始的字符串中子字符串的索引,例如:

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 中类似偏移量 ( 字符串 $haystack , 混合$needle [, 整型 $offset = 0 ] )

共有2个答案

焦博实
2023-03-14

获取带有utf-8字符的字符串切片可能会产生损坏的字符串,因为您需要将其转换为符文

[]rune(video Html)[0: index]

申屠俊发
2023-03-14

string包没有提供这样的功能,但实际上很少需要它。通常strings.Split()函数用于轻松地将字符串拆分为标记/部分。

但是如果您确实需要它:您可以简单地切片一个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游乐场上尝试):

10
25

请注意,在切片字符串时,您必须传递给我们的Index()函数的偏移量是字节索引,而不是rune(字符)索引。只要你有少于128个代码点的字符,它们是相等的,但是超过这个字节索引将大于rune索引,因为这些代码点映射到UTF-8编码中的多个字节(这就是Go将字符串存储在内存中的方式)。strings.Index()返回字节索引,len(s)也返回字节长度,因此该示例将正确处理所有字符串。

使用字符串的原始任务。拆分() 可能如下所示:

s := "something.value=something=end"
parts := strings.Split(s, "=")
fmt.Println(parts)

哪些输出(在Go操场上试试):

[something.value something end]

要“解析”输出的值位于parts[1]中。

 类似资料:
  • 问题内容: 也就是说,如何从字符串中找到第n个出现的字符/字符串的索引? 例如: “ / folder1 / folder2 / folder3 / ”。在这种情况下,如果我要求第三次出现斜杠(/),它会出现在folder3之前,并且我希望返回该索引位置。我的实际意图是从字符的第n次出现开始对它进行子串化。 Java API中是否有任何方便/易于使用的方法,还是我们需要自己编写一个小的逻辑来解决这

  • 问题 你需要搜索一个字符串,并返回匹配的起始位置或匹配值本身。 解决方案 有几种使用正则表达式的方法来实现这个功能。其中一些方法被称为 RegExp 模式或对象还有一些方法被称为 String 对象。 RegExp 对象 第一种方式是在 RegExp 模式或对象中调用 test 方法。test 方法返回一个布尔值: match = /sample/.test("Sample text") # =>

  • 问题 你想在一条消息中查找某个关键字第一次或最后一次出现的位置。 解决方案 分别使用 JavaScript 的 indexOf() 和 lastIndexOf() 方法查找字符串第一次和最后一次出现的位置。语法: string.indexOf searchstring, start message = "This is a test string. This has a repeat or two

  • 问题内容: 我正在尝试从Java字符串中找到所有三个字母子字符串。 例如,从字符串“ example string”中,我应该得到“ exa”,“ xam”,“ amp”,“ mpl”,“ ple”,“ str”,“ tri”,“ rin”,“ ing”。 我尝试使用Java正则表达式“([[a-zA-Z]){3}”,但仅得到“ exa”,“ mpl”,“ str”,“ ing”。 有人可以告诉我

  • 问题内容: 如何找到两个子字符串之间的字符串? 我当前的方法是这样的: 但是,这似乎效率很低而且不合Python。什么是做这样的更好的方法? 忘了提:该字符串可能无法启动,并最终和。他们之前和之后的字符可能更多。 问题答案:

  • 我必须制作一个Java程序,在给定的字符串中找到长度为n的所有重复子字符串。输入是字符串非常长,暴力方法需要花费太多时间。 我一直在尝试: 目前我正在分别查找每个子字符串,并使用KMP alogrithm检查该子字符串的重复。这也花了太多时间。 解决这个问题的更有效方法是什么?