go语言字符串学习笔记
字符串(string)
1.1 什么是字符串
golang中的字符串实际上是一个字节的切片,可以将启内容封装在“”来创建字符串。
go中的字符串是Unicode兼容,编码为UTF-8
1.2 字符串的使用
基本介绍:
语法: “”, ``, "a", "abc", "三"
字符:对应编码表中的编码值。
A->65, B->66...
字符串是字节的集合。
字符串不可修改。
声明字符串:
var str string = `12`
str2 := "abc"
str3 := ""
fmt.Printf("str1 : %s, str2:%s, str3:%s", str, str2, str3)
结果如下:
str1 : 12, str2:abc, str3:
获取字符串长度
len(str)
遍历字符串
str2 := "abcd"
for _, v := range str2 {
fmt.Printf("%c, ", v)
}
a, b, c, d,
字符串不可修改
str2 := "abcd"
str2[0] = "0"
fmt.Println(str2)
会报以下错误
cannot assign to str2[0]
1.3 string 常用函数
关于string的api可以查询官方网站,国内无法FQ可以访问http://docscn.studygolang.com/pkg/strings/
Compare
func Compare(a, b string) int
Compare 用来比较两个字符串,如果内容相等则返回0, 如果a>b则返回1, 如果a<b则返回-1
Contaons
func Contains(s, substr string) bool
是否包含制定字符串s
fmt.Println(strings.Contains("seafood", "foo")) //true
fmt.Println(strings.Contains("seafood", "bar")) //false
fmt.Println(strings.Contains("seafood", "")) // true
fmt.Println(strings.Contains("", "")) //true
ContainsAny
func ContainsAny(s, chars string) bool
是否包含chars 任意一个字符即可。
代码:
fmt.Println(strings.ContainsAny("team", "i")) //false
fmt.Println(strings.ContainsAny("failure", "u & i")) //true
fmt.Println(strings.ContainsAny("foo", "")) //false
fmt.Println(strings.ContainsAny("", "")) // false
Count
func Count(s, sep string) int
统计字符sep在s中出现的次数
fmt.Println(strings.Count("cheese", "e")) //3
fmt.Println(strings.Count("five", "")) // before & after each rune // 5
Index
func Index(s, sep string) int
查找sep在s中的位置
fmt.Println(strings.Index("chicken", "ken")) //4
fmt.Println(strings.Index("chicken", "dmr")) //-1
HasPrefix
func HasPrefix(s, prefix string) bool
判断s是否以prefix开头
fmt.Println(strings.HasPrefix("abcd", "a")) //true
IndexAny
func IndexAny(s, chars string) int
查找任意chars中任意一个在s中的位置
fmt.Println(strings.IndexAny("chicken", "aeiouy")) //2
fmt.Println(strings.IndexAny("crwth", "aeiouy")) //-1
Join
func Join(a []string, sep string) string
字符串拼接
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
输出:foo, bar, baz
Split
func Split(s, sep string) []string
字符串切割
fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
输出:
["a" "b" "c"]
["" "man " "plan " "canal panama"]
[" " "x" "y" "z" " "]
[""]
ToLower & ToUpper
大小写转换
fmt.Println(strings.ToLower("Gopher"))//gopher
fmt.Println(strings.ToUpper("Gopher")) //GOPHER
1.4 string 与其他类型的转换
bool类型转换
s := "true"
b1, err := strconv.ParseBool(s)
if err != nil {
fmt.Println(err)
}
fmt.Println(b1)
输出:
true
如果字符串s不是true或者false呢?
s := "tru1e"
b1, err := strconv.ParseBool(s)
if err != nil {
fmt.Println(err)
}
fmt.Println(b1)
输出:
strconv.ParseBool: parsing "tru2e": invalid syntax
false
string转换整数类型
s := "100"
i1, err := strconv.ParseInt(s, 2, 64) //二进制,64位bitSize,正常用10进制
if err != nil {
fmt.Println(err)
return
}
fmt.Println(i1)
输出:
4
整数转换为string
str2 := strconv.FormatInt(100, 10)
fmt.Println(str2) // "100"