GO+ 字符串处理教程(4.4)

举报
liuzhen007 发表于 2022/02/20 23:06:04 2022/02/20
【摘要】 字符串处理分类在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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。