如何获取从特定位置/具有特定偏移量开始的字符串中子字符串的索引,例如:
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 ] )
获取带有utf-8字符的字符串切片可能会产生损坏的字符串,因为您需要将其转换为符文
[]rune(video Html)[0: index
]
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检查该子字符串的重复。这也花了太多时间。 解决这个问题的更有效方法是什么?