获取字符串的某段子串substring(字符串分割)是开发过程中常见的操作。
1. 字符串搜索常用方法
-
获取全字符串中某个字符的ascii下标。strings.Index():正向搜索子串;strings.LastIndex():反向搜索子串
-
搜索的起始位置可以通过切片偏移操作。strings.Index(string[substring的前一字符:], “substring”),即从substring的前一字符到全字符的末尾,搜索substring首字符的相对ascii位置。然后,使用切片string[绝对位置+相对位置:],获得字符串的某段子串。
2. 使用strings.Index(),在全字符串中正向搜索子串的首字符,返回首字符在全字符串中的ascii下标
package string_test
import (
"fmt"
"strings"
"testing"
)
// 使用strings.Index(),在tracer字符串"死神来了,死神byebye"中搜索子串",",返回","在tracer字符串中的ascii下标
func TestSubstringSearch(t *testing.T) {
tracer := "死神来了,死神byebye"
comma := strings.Index(tracer, ",")
fmt.Println(comma)
}
// 12
3. 使用切片string[绝对位置+相对位置:],获得字符串的某段子串
使用切片,从字符串"死神来了,死神byebye"中的",“的ascii下标开始(绝对位置),一直到字符串结束,构造一个子串”,死神byebye",在这个子串中搜索"死神",返回子串首字符的ascii下标(相对位置)。
然后,使用切片string[绝对位置+相对位置:],获得字符串的某段子串。
package main
import (
"fmt"
"strings"
)
// 返回从第二个死神开始的子串
func main() {
tracer := "死神来了,死神byebye"
comma := strings.Index(tracer, ",") // 使用strings.Index,在字符串"死神来了,死神byebye"中搜索子串",",返回","位置的ascii字符串下标
pos := strings.Index(tracer[comma:], "死神") // 从字符串"死神来了,死神byebye"中的","位置开始,一直到字符串结束,构造一个子串",死神byebye",在这个子串中搜索"死神",返回ascii下标(相对位置)
fmt.Println(comma, pos, tracer[comma+pos:])
// 输出","在tracer字符串的绝对位置,输出"死神"在tracer[comma:]子串的相对位置,利用切片偏移(绝对位置+相对位置)输出子串“死神byebye”
}
// 12 3 死神byebye