GO+ 字符串处理教程(4.4)
【摘要】 字符串处理分类在GO中,字符串处理大致分为三类,对字符串做判断并返回是否,比如是否包含等;对字符串做搜索查询返回下标,比如查询子串位置;对字符串做操作,返回其它结构,比如切割字符串。使用内置字符串库,需要先导入strings库,使用import "strings"语句导入。一、判断类示例一、// 判断字符串是否以给定前缀开始println strings.HasPrefix("abc", "...
字符串处理分类
在GO中,字符串处理大致分为三类,对字符串做判断并返回是否,比如是否包含等;对字符串做搜索查询返回下标,比如查询子串位置;对字符串做操作,返回其它结构,比如切割字符串。使用内置字符串库,需要先导入strings库,使用import "strings"语句导入。
一、判断类
示例一、
// 判断字符串是否以给定前缀开始
println strings.HasPrefix("abc", "a") // true
println strings.HasPrefix("abc", "b") // false
println strings.HasPrefix("abc", "") // true
println strings.HasPrefix("", "a") // false
println strings.HasPrefix("", "") // true
var str string
println strings.HasPrefix("abc", str) // true
这里需要注意任何字符串都算是以""前缀开始,包括""本身,所以判断是否以string类型的变量为前缀要确定变量不是"",否则会一直返回true。
示例二、
// 判断字符串是否以给定后缀结束
println strings.HasSuffix("abc", "c") // true
println strings.HasSuffix("abc", "a") // false
println strings.HasSuffix("abc", "") // true
println strings.HasSuffix("", "a") // false
println strings.HasSuffix("", "") // true
var str string
println strings.HasSuffix("abc", str) // true
这里需要注意任何字符串都算是以""后缀结束,包括""本身,所以判断是否以string类型的变量为后缀要确定变量不是"",否则会一直返回true。
示例三、
// 判断给定两个字符串是否相等,忽略大小写
println strings.EqualFold("a", "a") // true
println strings.EqualFold("a", "b") // false
println strings.EqualFold("a", "") // false
println strings.EqualFold("", "a") // false
println strings.EqualFold("This is title", "this is title") // true
示例四、
// 判断给定的第二个字符串是否是第一个的子串
println strings.Contains("abc", "a") // true
println strings.Contains("abc", "b") // true
println strings.Contains("abc", "d") // false
println strings.Contains("abc", "") // true
println strings.Contains("", "") // true
注意:""是任何字符串的子串。
二、查询类
示例一、
// 返回字符串s中有几个不重复的sep子串
println strings.Count("", "") // 1
println strings.Count("aaaaa", "aa") // 2
println strings.Count("ababa", "aba") // 1
println strings.Count("ababa", "") // 6
println strings.Count("", "ababa") // 0
注意:如果查询的是有几个"",那么返回的是字符串长度加1。
示例二、
// 子串sep在字符串s中第一次出现的位置,不存在则返回-1,下标以0开始
println strings.Index("abcabc", "b") // 1
println strings.Index("abcabc", "") // 0
println strings.Index("abcabc", "d") // -1
println strings.Index("", "") // 0
注意:如果查询""的位置,那么固定返回0。
三、操作类
示例一、
// 返回s中每个单词的首字母都改为标题格式的字符串拷贝
println strings.Title("this is title") // This Is Title
var str = "this is title"
fmt.Printf("%p: %s\n", &str, str) // 0xc00008c230: this is title
newStr := strings.Title(str)
fmt.Printf("%p: %s\n", &str, str) // 0xc00008c230: this is title
fmt.Printf("%p: %s\n", &newStr, newStr) // 0xc00008c250: This Is Title
注意,这里返回的是字符串的拷贝,所以可以看到newStr的内存地址和str的是不同的,此操作不会改变实参str的值
示例二、
// 使用给定字符串分割母串,给定字符串不包括在返回数组里面,并有以下规则
// 1. 当用""来分割时候,返回每个字符的数组
// 2. 当用" "来分割时候,可以连续" ",返回空格数量等量的""
// 3. 当母串以分割串为前缀或后缀时候会多返回一个""
// 4. 母串中不包括分割串直接返回内容为母串大小为1的数组
fmt.Printf("%q\n", strings.Split("abc", "")) // ["a" "b" "c"] - 原理1解释
fmt.Printf("%q\n", strings.Split("a b c", "")) // ["a" " " "b" " " "c"] - 原理1解释
fmt.Printf("%q\n", strings.Split("a b c ", "")) // ["a" " " "b" " " "c" " "] - 原理1解释
fmt.Printf("%q\n", strings.Split("abababa", "b")) // ["a" "a" "a" "a"] - 正常分割
fmt.Printf("%q\n", strings.Split("abc", "c")) // ["ab" ""] - 原理3解释
fmt.Printf("%q\n", strings.Split("abc", "a")) // ["" "bc"] - 原理3解释
fmt.Printf("%q\n", strings.Split("abc", "d")) // ["abc"] - 不包括,原理4解释
fmt.Printf("%q\n", strings.Split("a b c ", " ")) // ["a" "b" "c" ""] - 原理3解释
fmt.Printf("%q\n", strings.Split("a b c ", " ")) // ["a" "b" "c" "" ""] - 原理3解释
示例三、
// 使用给定子串拼接数组
fmt.Printf("%q\n", strings.Join([]string{}, "")) // ""
fmt.Printf("%q\n", strings.Join([]string{}, " ")) // ""
fmt.Printf("%q\n", strings.Join(nil, "a")) // ""
fmt.Printf("%q\n", strings.Join([]string{"a", "b"}, "")) // "ab"
fmt.Printf("%q\n", strings.Join([]string{"a", "b", " "}, "")) // "ab "
fmt.Printf("%q\n", strings.Join([]string{"a", "b"}, " ")) // "a b"
注意:数组长度为0或为nil时候固定返回"",不论子串是什么。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)