亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何找到跳過 N 個字符的子串

如何找到跳過 N 個字符的子串

Go
當年話下 2023-06-01 10:03:48
如何從某個位置/某個偏移量開始跳過字符串中的子字符串的索引,例如:package mainimport (    "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 ] )
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

strings軟件包沒有為您提供這樣的功能,但實際上很少需要它。通常該strings.Split()函數用于輕松地將字符串拆分為標記/部分。

但是如果你確實需要它:你可以簡單地切片a?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 Playground上嘗試):

1025

請注意,在對字符串進行切片時,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].


查看完整回答
反對 回復 2023-06-01
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

取一段帶有 utf-8 字符的字符串可能會產生損壞的字符串,因為您需要將其轉換為符文

[]rune(videoHtml)[0:index]


查看完整回答
反對 回復 2023-06-01
  • 2 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號