Go语言的字符串操作

获取字符串长度

  • 已知字符串在Go语言中的本质是一个切片,如果想获得切片的长度,可以通过len()函数获取

  • 所以可以通过len() 函数来获取字符串的长度

  • 案例

package main

import "fmt"

func main() {

    str := "abcde"

    length := len(str)

    fmt.Println("length = ",length)  //  length =  5
}
  • 注意点
  1. len()函数在获取字符串的时候 , 获取的是字节数
  2. 在Go语言中 ,中文 是按照UTF-8编码的, 所以一个中文占用3个字节
package main

import "fmt"

func main() {

    str := "好"

    length := len(str)

    fmt.Println(length)  // length = 3
}
  1. 如果像获取中文的个数,而不是字节数,那么需要讲字符转换为rune类型的切片才行
  • 案例
package main

import "fmt"

func main() {

    str := "好好学习"

    length := len(str)

    fmt.Println("length = ",length)  // length =  12

    var str2 []rune = []rune(str)  // 转换为rune 类型的切片  强制转换--> 转换的数据类型(要转换的数据)

    length2 := len(str2)

    fmt.Println("length2 = ",length2)  //length =  4
}

字符串的查找

  1. 查找字符串出现的位置

从左至右查找的函数

  • 功能:
  1. 超找指定字符在字符串中的位置
  2. 会从左至右的超找, 一旦查找到指定字符就不再查找,并返回该字符的位置, 如果没有查找到返回-1
1. func IndexByte(s string, c byte) int
  • 注意点
    只能超找字符不能查找中文
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.jianshu.com"  

    index := strings.IndexByte(str,'c')  // 查找字符

    fmt.Println("index = ",index)  // index  = 12
    
}


2. func IndexRune(s string, r rune) int
  • 注意点
    可以超找字符也可以查找中文
    查找中文时 一个中文占用3 个索引位置
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.简书.com"

    index := strings.IndexRune(str,'简')

    index2 := strings.IndexRune(str,'w')

    fmt.Println("index = ",index)  // index  = 4

    fmt.Println("index = ",index2)  // index  = 0

}

3.func IndexAny(s, chars string) int
  • 注意点
    超找时会将指定查找的字符拆分开来查找, 查找完返回其中位置最靠前的字符的位置 ----> (支持中文和字符)
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.jianshu.com"

    index := strings.IndexAny(str,"wjc")
    
    fmt.Println("index = ",index)  // index  = 0
    
}

4.func Index(s, sep string) int
  • 注意点
  • 超找时会将指定查找的字符看作一个整体来查找, 查找完返回其位置** ----> (支持中文和字符)
package main

import (
"fmt"
"strings"
)

func main() {

    str := "www.简书.com"

    index := strings.Index(str,"简书")

    fmt.Println("index = ",index)  // index  = 4

}

5.func IndexFunc(s string, f func(rune) bool) int
  • 自定义超找
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.简书.com"

    index := strings.IndexFunc(str,lookup)

    fmt.Println("index = ",index)  // index  = 13

}

// 自定义超找的内容
func lookup(ch rune)bool{
    if ch == 'm' {
        return true
    }
    return false
}

从右至左查找的函数

2.从右至左查找跟从左至右基本一样

    func LastIndex(s, sep string) int
    func LastIndexByte(s string, c byte) int
    func LastIndexAny(s, chars string) int
    func LastIndexFunc(s string, f func(rune) bool) int

字符串包含

  • 判断字符串中是否包含指定的字符, 包含就返回ture 不含饭返回 false
1.func Contains(s, substr string) bool
  • 判断字符串中是否包含指定的子串

  • 注意点

  1. 会将指定子串看成一个整体 查找
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.jianshu.com"

    res := strings.Contains(str,"com")

    fmt.Println("res = ",res)  // res  = true

}

2.func ContainsRune(s string, r rune) bool
  • 判断字符串中是否包含指定的字符----->(支持中文单字)
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.jianshu.com"

    res := strings.ContainsRune(str,'s')

    fmt.Println("res = ",res)  // res  = true

}

3.func ContainsAny(s, chars string) bool
  • 判断字符串中是否包含指定的子串

  • 注意点

  1. 会讲指定查找的子串拆分开来查找
  2. 支持中文超找
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "www.jianshu.com"

    res := strings.ContainsAny(str,"xyzs")

    fmt.Println("res = ",res)  // res  = true

}

4.func HasPrefix(s, prefix string) bool
  • 功能 判断字符串是否以指定字符串开头
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "2018年报表1"

    res := strings.HasPrefix(str,"2018")

    fmt.Println("res = ",res)  // res  = true

}

5.func HasSuffix(s, suffix string) bool
  • 功能 判断字符串是否以指定字符串结尾
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "如歌.mp3"

    res := strings.HasSuffix(str,".mp3")

    fmt.Println("res = ",res)  // res  = true

}

字符串比较

1. func Compare(a, b string) int
  • 功能
  1. 判断两个字符串是否相等
  2. 如果相等返回0
  3. 如果不相等的情况下
    第一个字符串>第二个字符串-----> 返回1
    第一个字符串<第二个字符串-----> 返回-1
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "123456"
    str1 := "123456"
    str2 := "123"
    str3 := "124"

    res := strings.Compare(str,str1)

    res2 := strings.Compare(str1,str2)
    
    res3 := strings.Compare(str2,str3)

    fmt.Println("res = ",res)  // res  = 0

    fmt.Println("res2 = ",res2)  // res2 = 1

    fmt.Println("res3 = ",res3)  // res3 = -1

}

2. func EqualFold(s, t string) bool
  • 作用 判断两个字符串是否相等,相等返回ture 不相等返回 false
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "123456"
    str1 := "123456"
    str2 := "123"
    
    res := strings.EqualFold(str,str1)

    res2 := strings.EqualFold(str1,str2)

    fmt.Println("res = ",res)  // res  = true

    fmt.Println("res2 = ",res2)  // res2 = false

}

字符串转换

1.unc ToUpper(s string) string
  • 作用 将指定的字符串所有字母变成大写的并返回一个新的字符串
package main

import (
    "fmt"
    "strings"
)

func main() {
    
    str := "abcdefg"

    str2 := strings.ToUpper(str)

    fmt.Println(str2)  // str2 = ABCDEFG

}

2.func ToLower(s string) string
  • 作用 将指定的字符串所有字母变成小写的并返回一个新的字符串
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "ABCDEFG"

    str2 := strings.ToLower(str)

    fmt.Println(str2)  // str2 = abcdefg

}

3.func ToTitle(s string) string
  • 作用 指定字符串转换为大写
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "hello world this is golang language"

    str2 := strings.ToTitle(str)

    fmt.Println(str2)  // str2 = HELLO WORLD THIS IS GOLANG LANGUAGE

}

4.func ToUpperSpecial(_case unicode.SpecialCase, s string) string

5.func ToLowerSpecial(_case unicode.SpecialCase, s string) string

6.func ToTitleSpecial(_case unicode.SpecialCase, s string) string

7. func Title(s string) string
  • 作用将字符串中的单词首字母大写 需要用- 和空格 来将单词隔开
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "hello world this is golang language"

    str2 := strings.Title(str)

    fmt.Println(str2)  // str2 = Hello World This Is Golang Language

}

字符串的拆合

1. 字符串切割

  • func Split(s, sep string) []string

Split作用: 按指定字符来切割字符串, 分割后不包含指定的字符

package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "2018-09-29-15-59"

    str1 := strings.Split(str,"-")

    fmt.Println(sce)  // str1 = [2018 09 29 15 59]

}

  • func SplitN(s, sep string, n int) []string

SplitN的作用 按照指定字符切割字符串 并指定切割乘 几份

package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "2018-09-29-15-59"

    str1 := strings.SplitN(str,"-",2)

    fmt.Println(str1)  // str1 = [2018    09-29-15-59]

}

  • func SplitAfter(s, sep string) []string

SplitAfter的作用按照 指定字符串切割原有字符串, 切割后包含指定的字符

package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "2018-09-29-15-59"

    str1 := strings.SplitAfter(str,"-")

    fmt.Println(str1)  //  str1 = [2018- 09- 29- 15- 59]

}

  • func SplitAfterN(s, sep string, n int) []string

SplitAfterN作用: 按照指定字符串切割原有字符串, 切割为指定的份数, 切割完包含指定字符

package main

import (
"fmt"
"strings"
)

func main() {

    str := "2018-09-29-15-59"

    str1 := strings.SplitAfterN(str,"-",3)

    fmt.Println(str1)  //  str1 = [2018-  09-  29-15-59]

}

2. 按照空格切割字符串

  • func Fields(s string) []string

Fields作用 按照空格来切割字符串 (连续多余的空格按一个空格处理)

package main

import (
"fmt"
"strings"
)

func main() {

    str := "182 4030 6093"

    str1 := strings.Fields(str)

    fmt.Println(str1)  //  str1 = [182  4030  6093]

}

  • func FieldsFunc(s string, f func(rune) bool) []string

FieldsFunc作用 自定义分割字符串的标准

package main

import (
"fmt"
"strings"
)

func main() {

    str := "2018/09/29"

    str1 := strings.FieldsFunc(str,divisional)

    fmt.Println(str1)  //  str1 = [2018 09 29]

}

func divisional(ch rune)bool{
    if ch== '/' {
        return true
    }

    return false
}

3.字符串合并

  • func Join(a []string, sep string) string

Join 按照指定字符拼接切片中的字符串

package main

import (
    "fmt"
    "strings"
)

func main() {

    str := []string{"www","jianshu","com"}

    str1 := strings.Join(str,".")

    fmt.Println("str1 = ",str1)  // str1 = www.jianshu.com

}

4.重复生成字符串

  • func Repeat(s string, count int) string

Repeat的作用 就是将字符串复制成指定份数后组成一个新的字符串

package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "A"

    str1 := strings.Repeat(str,3)

    fmt.Println("str1 = ",str1)   // str1 =  AAA

}

5.替换字符串

  • func Replace(s, old, new string, n int) string

Replace 的作用就是将原先字符串中 指定的字符串替换成新的字符串 , 最后的一个参数指定替换几次 如果是-1就是全部替换

package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "hello hello hello hello"

    str1 := strings.Replace(str,"h","H",-1)

    fmt.Println("str1 = ",str1)   //str1 =  Hello Hello Hello Hello

}

字符串清理

1.func Trim(s string, cutset string) string

1.1.func TrimFunc(s string, f func(rune) bool) string

  • 作用 去除字符串前后指定的字符串
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "hello Hello everyone hello"

    str1 := strings.Trim(str,"hello")

    fmt.Println("str1 = ",str1)   //str1 =   Hello everyone 

}

2.func TrimLeft(s string, cutset string) string

2.1.func TrimLeftFunc(s string, f func(rune) bool) string -->(自定义从左去除指定字符串)

3.func TrimRight(s string, cutset string) string

3.1.func TrimRightFunc(s string, f func(rune) bool) string--->(自定义从右去除指定字符串)

  • TrimLeft 只去除左边指定去除的字符串
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "hello Hello everyone"

    str1 := strings.TrimLeft(str,"hello")

    fmt.Println("str1 = ",str1)   //str1 =   Hello everyone

}
  • TrimRight 只去处右边指定去除的字符串
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := " Hello everyone hello"
    
    str1 := strings.TrimRight(str,"hello")

    fmt.Println("str1 = ",str1)   //str1 =   Hello everyone
    
}

7.func TrimSpace(s string) string

  • 去除字符串前后的空格
package main

import (
    "fmt"
    "strings"
)

func main() {

    str := "        Hello World         "

    str1 := strings.TrimSpace(str)

    fmt.Println("str1 = ",str1)   //str1 = Hello everyone

}

8.func TrimPrefix(s, prefix string) string ---> 去除以指定字符开头的字符串

9.func TrimSuffix(s, suffix string) string ---> 去除以指定字符结尾的字符串

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345