Go学习——字符串

引入 —— 字符类型

在 Go 语言中支持两种字符类型,

  1. byte类型,实际上是一个uint8类型,代表一个ASCII码字符

  2. rune类型,实际上是一个int32类型,代表一个UTF-8字符

三种引号

  • 单引号 '

    用于表示一个rune字符

  • 双引号"

    用于表示一个字符串,支持转义,不支持多行

  • 反引号 `

    用于表示一个字符串,不支持转义,支持多行,通常用于表示一些正则表达式、html、json等语句

 'a'与"a"是不能比较的,因为前者是一个rune字符而后者是一个字符串
 ​
 "a"与`a`是可以比较的,且此时两者相等

字符串本质

字符串的本质是一个由字符组成的只读数组,并且每个元素默认是byte类型字符。因此对于中文字符串,在做截取的时候,需要先将其转化成rune类型的字符数组,如下:

 str := "中文"
 fmt.Printf("%T\n", str)
 fmt.Println(str[0])
 fmt.Println(len(str))
 rStr := []rune(str)
 fmt.Println(rStr[0])
 fmt.Println(string(rStr[0]))
 fmt.Println(len(rStr))

输出:

 string
 228
 6
 20013
 中
 2

常用转义字符

img

修改字符串

若想要修改字符串,则需先将其转化成一个byte类型或rune类型切片

 str := "abc"
 slice := []byte(str)
 slice[0] = 'A'
 new_str := string(slice)
 fmt.Println(new_str)

输出:

 Abc
 
str := "哈哈哈"
 slice := []rune(str)
 slice[2] = '嘿'
 new_str := string(slice)
 fmt.Println(new_str)

输出:

 哈哈嘿

常用操作

  • 长度

    len()获取的是以字节为单位的长度,因此要获取中文字符串长度,需要用utf8.RuneCountInString

  • 转化

    字符串转整数:i, err := strconv.Atoi()

    整数转字符串:str := strconv.Itoa()

    切片转字符串:str := string([]byte{1,2,3})

    进制转化:str := strconv.FormatInt(i int, base b)

  • 子串判断

    var judge bool = strings.Contains(str,sub_str string)

  • 子串计数

    var counts int = strings.Count(str, sub_str string)

  • 比较

    区分大小写的比较使用:==

    不区分大小写的比较使用:strings.EqualFold(str1, str2 string)

  • 寻找子串

    寻找字符串第一次出现的位置 ,不存在返回-1:strings.Index(s,str string)

    寻找一个字符在字符串中最后一次返回的位置 :strings.LastIndex(s,str)

  • 替换

    将s中的前n个oldstr替换为newstr,n为-1时替换所有strings.Replace(s,oldstr,newstr,n)

  • 分割

    string[] = strings.Split(s,str)得到一个字符串数组

  • 剔除

    strings.Trim (s, str string)将s两边的str剔除

  • 判断是否以str开头或结尾

    strings.HasPrefix(s,str)

    strings.HasSuffix(s,str)

  • 连接

    • 原生+

    • fmt.Sprintf("%s%s", str1, str2)

    • strings.Builder

       var builder strings.Builder
       builder.WriteString("abc")
       builder.String()
    • bytes.Buffer

       buf := new(bytes.Buffer)
       buf.WriteString("abc")
       buf.String()
    • strings.Join([]string, string)

    • 切片append

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值