linuxea:go字符串和字节(28)


I. 8.字符串和字节

字符串和字节切片

  • 区别

bytes: 将buffer对象转换为字节切片

String: 将buffer对象转化为字符串

  • 转换

可以将string通过函数byte[]转化为字节切片,同时也可通过

II. 8.1strings包介绍

strings包提供操作UFT-8字符串常用函数

  • a).常用函数

Compare: 比较字符串

Contains:是否包含子字符串

Count: 字符串出现次数

EqualFold: 不区分大小写比较

Fields: 按空白符分割字符串

Split: 分割字符串为切片

Join: 将字符串切片链接

LastIndex: 获取字符串最后一次出现的位置

Hasprefix: 是否以字符串作为某个字符串开头

HasSuffix: 是否以字符串作为某个字符串结尾

Index: 获取字符串首次出现

III. 8.2strings常用操作

  • 比较字符串
package main
import (
    "fmt"
    "strings"
)
func main(){
    fmt.Println(strings.Compare("abc","bac"))
}

不相等则是-1,否则是0

[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
-1
  • 是否包含某字符串

abc是否包含bc,包含则为true

fmt.Println(strings.Contains("abc","bc"))

运行

[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
true
  • 只要包含一个字符就为ture

abcdsadasdasdas只要包含一个b就为true

fmt.Println(strings.Contains("abcdsadasdasdas","b"))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
true
  • 获取字符串出现的次数

获取abcdsadasdasdas中a出现的次数

fmt.Println(strings.Count("abcdsadasdasdas","a"))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
5
  • 分割

按空白字符分割

    fmt.Println(strings.Fields("abc def\n eeee"))
    fmt.Printf("%q\n",strings.Fields("abc def\n eeee"))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
[abc def eeee]
["abc" "def" "eeee"]
  • 以什么结尾和开头

HasPrefix是以什么开头,如果是就为true

HasSuffix是以什么结尾,如果是就为true

    fmt.Println(strings.HasPrefix("abcd","ab"))
    fmt.Println(strings.HasSuffix("abcd","cd"))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
true
true
  • 索引位置

cd在abcd中的索引位置,如果存在则打印索引位置,如果不存在就等于-1

fmt.Println(strings.Index("abcd","cd"))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go 
2

这里还有Lastindex,就是最后出现的索引位置

    fmt.Println(strings.LastIndex("abcdaasxcd","cd"))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go
8
  • 分隔符
fmt.Println(strings.Split("adbcdef;abcd;abcd3edsa",";"))

以;进行分割

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
[adbcdef abcd abcd3edsa]
  • 连接符
fmt.Println(strings.Join([]string{"adb","abcd","abcd3edsa"},"~"))

以~进行链接

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
adb~abcd~abcd3edsa
  • 重复N份
fmt.Println(strings.Repeat("abc",3))

将acb重复三次

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
abcabcabc
  • 替换

将abcabcabcabc中的a替换成1,1表示替换一次

    fmt.Println(strings.Replace("abcabcabcabc","a","1",1))

将abcabcabcabc中的a替换成1,-1表示全部替换

    fmt.Println(strings.Replace("abcabcabcabc","a","1",-1))

将abcabcabcabc中的a替换成1,ReplaceAll不需要指定替换多少次,默认替换全部

    fmt.Println(strings.ReplaceAll("abcabcabcabc","a","1"))

运行

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
1bcabcabcabc
1bc1bc1bc1bc
1bc1bc1bc1bc
  • 大小写转换

ToLower转换小写,ToUpper转换大写

    fmt.Println(strings.ToLower("abcABC"))
    fmt.Println(strings.ToUpper("abcABC"))

运行

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
abcabc
ABCABC
  • 首字母大写
fmt.Println(strings.Title("hello"))

将hello首字母大写

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
Hello
  • 前后字符去掉
fmt.Println(strings.Trim("xhelloxz","xz"))

去掉xhelloxz前后包括xz或者前后包含x,z的字符

[root@www.linuxea.com /opt/Golang/work2]# go run string.go
hello
  • 去除空白字符
fmt.Println(strings.TrimSpace(" hello \n \r "))
[root@www.linuxea.com /opt/Golang/work2]# go run string.go
hello

IV. 8.3定义字节切片

byte是无符号的uint8类型。

package main
import (
    "fmt"
)
func main(){
    var bytes []byte = []byte{'a','b','c'}
    fmt.Printf("%T,%#v\n",bytes,bytes)
}
[root@www.linuxea.com /opt/Golang/work2]# go run byte.go 
[]uint8,[]byte{0x61, 0x62, 0x63}

这里a,b,c的ASCII分别是0x61, 0x62, 0x63

V. 8.4字节转换字符串

直接使用string转换即可

package main
import (
    "fmt"
)
func main(){
    var bytes []byte = []byte{'a','b','c'}
    fmt.Printf("%T,%#v\n",bytes,bytes)
    
    sb := string(bytes)
    fmt.Printf("%T %v\n",sb,sb)
}

将定义的bytes转换成字符串

[root@www.linuxea.com /opt/Golang/work2]# go run byte.go 
[]uint8,[]byte{0x61, 0x62, 0x63}
string abc

VI. 8.5字符串转字节

将转换过的字符串再转回字节

package main
import (
    "fmt"
)
func main(){
    var bytes []byte = []byte{'a','b','c'}
    fmt.Printf("%T,%#v\n",bytes,bytes)
    
    sb := string(bytes)
    fmt.Printf("%T %v\n",sb,sb)


    bs := []byte(sb)
    fmt.Printf("%T %#v\n",bs,bs)
}

如下

[root@www.linuxea.com /opt/Golang/work2]# go run byte.go 
[]uint8,[]byte{0x61, 0x62, 0x63}
string abc
[]uint8 []byte{0x61, 0x62, 0x63}

VII. 8.6bytes包

bytes包与strings包基本上一样

  • Compare 比较

按照直接数组进行比较

fmt.Println(bytes.Compare([]byte("abc"),[]byte("def")))

运行

[root@www.linuxea.com /opt/Golang/work2]# go run byte.go
-1
  • Index索引位置

bytes.Index索引位置

计算字节def在abcdef的索引位置

fmt.Println(bytes.Index([]byte("abcdef"),[]byte("def")))

运行

[root@www.linuxea.com /opt/Golang/work2]# go run byte.go
3
  • bytes.Contains

字节abcdef是否包含def,如果包含则为true,否则false

fmt.Println(bytes.Contains([]byte("abcdef"),[]byte("def")))

运行

[root@www.linuxea.com /opt/Golang/work2]# go run byte.go
true

VIII. 8.7计算unicode

当使用len计算字符串是可以的,但是遇到中文字符就需要unicode/utf8模块计算。如下:

[root@www.linuxea.com /opt/Golang/work2]# cat byte1.go
package main
import (
    "fmt"
    "unicode/utf8"
)
func main(){
    s := "这是一个测试"
    fmt.Println(s)
    fmt.Println(utf8.RuneCountInString(s))
}

运行

[root@www.linuxea.com /opt/Golang/work2]# go run byte1.go
这是一个测试
6
0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2020-02-04分类: Golang

标签: Golang

发表评论

仅有一条评论

加载中,请稍候...
  1. 黄钻V10
    February 22nd, 2020 at 03:03 pm

    好棒 现在 icon_biggrin.gif