獲取字串的某一段字元是開發中常見的操作,我們一般將字串中的某一段字元稱做
子串(substring)。
下面例子中使用 strings.Index() 函數在字串中搜尋另外一個子串,程式碼如下:
tracer := "死神來了, 死神bye bye"
comma := strings.Index(tracer, ", ")
pos := strings.Index(tracer[comma:], "死神")
fmt.Println(comma, pos, tracer[comma+pos:])
程式輸出如下:
12 3 死神bye bye
程式碼說明如下:
1) 第 2 行嘗試在 tracer 的字串中搜尋中文的逗號,返回的位置存在 comma 變數中,型別是 int,表示從 tracer 字串開始的 ASCII 碼位置。
strings.Index() 函數並沒有像其他語言一樣,提供一個從某偏移開始搜尋的功能。不過我們可以對字串進行切片操作來實現這個邏輯。
2) 第4行中,tracer[comma:] 從 tracer 的 comma 位置開始到 tracer 字串的結尾構造一個子字串,返回給 string.Index() 進行再索引。得到的 pos 是相對於 tracer[comma:] 的結果。
comma 逗號的位置是 12,而 pos 是相對位置,值為 3。我們為了獲得第二個“死神”的位置,也就是逗號後面的字串,就必須讓 comma 加上 pos 的相對偏移,計算出 15 的偏移,然後再通過切片 tracer[comma+pos:] 計算出最終的子串,獲得最終的結果:“死神bye bye”。
總結
字串索引比較常用的有如下幾種方法:
-
strings.Index:正向搜尋子字串。
-
strings.LastIndex:反向搜尋子字串。
-
搜尋的起始位置可以通過切片偏移製作。