s := "我hello world"
fmt.Println("字节长度:",len(s)) // 字节长度: 14
// golang中的unicode/utf8包提供了用utf-8获取长度的方法
fmt.Println("RuneCountInString: ",utf8.RuneCountInString(s))
// 通过rune类型处理unicode字符
fmt.Println("rune: ",len([]rune(s)))
fmt.Println()
fmt.Println("---------------")
for i, ch := range s {
fmt.Printf("%d:%c ",i,ch)
}
fmt.Println()
fmt.Println("---------------")
for i, ch := range []byte(s) {
fmt.Printf("%d:%x ",i,ch)
}
fmt.Println()
fmt.Println("---------------")
for i, ch := range []rune(s) {
fmt.Printf("%d:%c ",i,ch)
}
字节长度: 14
RuneCountInString: 12
rune: 12
---------------
0:我 3:h 4:e 5:l 6:l 7:o 8: 9:w 10:o 11:r 12:l 13:d
---------------
0:e6 1:88 2:91 3:68 4:65 5:6c 6:6c 7:6f 8:20 9:77 10:6f 11:72 12:6c 13:64
---------------
0:我 1:h 2:e 3:l 4:l 5:o 6: 7:w 8:o 9:r 10:l 11:d
如果字符串涉及中文,遍历字符推荐使用rune,因为一个byte存不下一个汉语文字的unicode值。
rune 是Go语言中一种特殊的数据类型,是int32的别名,几乎所有方面等同于int32,用于区分字符值和整数值。
byte等同于int8 常用来处理ascii字符
rune等同于int32 常用来处理unicode或utf8字符
fmt.Println("判断是否包含子串: ",strings.Contains("seafood","foo"))
fmt.Println("判断字符串是否包含另一字符串中的任一字符: ",strings.ContainsAny("seafood","fzzz"))
fmt.Println("判断字符串是否包含unicode码值: ",strings.ContainsRune("你好",'你'))
fmt.Println("返回字符串包含另一字符串的个数: ",strings.Count("你好","你"))
fmt.Println("返回字符串中的任一unicode码值首次出现的位置: ",strings.IndexAny("教育基地A","用地"))
fmt.Println("返回字符串中的任一unicode码值首次出现的位置: ",strings.IndexAny("教育基地A","教用地"))
fmt.Println("返回字符串中的任一unicode码值首次出现的位置: ",strings.IndexAny("教育基地A","教用地"))
fmt.Println("返判断字符串是否包含unicode码: ",strings.IndexRune("教育基地A",'基'))
f:= func(c rune) bool{
return unicode.Is(unicode.Han,c)
}
fmt.Println("返回字符串中满足函数f(r)==true字符首次出现的位置: ",strings.IndexFunc("RFG教育基地A",f))
fmt.Println("返回字符串中满足函数f(r)==true字符最后出现的位置: ",strings.LastIndexFunc("RFG教育基地A",f))
//判断是否包含子串: true
//判断字符串是否包含另一字符串中的任一字符: true
//判断字符串是否包含unicode码值: true
//返回字符串包含另一字符串的个数: 1
//返回字符串中的任一unicode码值首次出现的位置: 9
//返回字符串中的任一unicode码值首次出现的位置: 0
//返回字符串中的任一unicode码值首次出现的位置: 0
//返判断字符串是否包含unicode码: 6
//返回字符串中满足函数f(r)==true字符首次出现的位置: 3
//返回字符串中满足函数f(r)==true字符最后出现的位置: 12
fmt.Println("将字符串以空白字符分割,并返回一个切片: ", strings.Fields(" abc 123 ABC"))
f:= func(c rune) bool {
return !unicode.IsLetter(c) && !unicode.IsNumber(c)
}
fmt.Println("将字符串以满足f(r)==true的字符分割返回切片: ", strings.FieldsFunc("abc@123*ABC&xyz%XYZ",f))
fmt.Println("将字符串以sep作为分隔符分割,分割后字符最后去掉sep: ", strings.Split("a,b,c",","))
fmt.Println("将字符串以sep作为分隔符分割,分割后字符最后附上sep: ", strings.SplitAfter("a,b,c",","))
fmt.Println("将字符串以sep作为分隔符分割,分割后字符最后附上sep,n决定返回的切片数: ", strings.SplitAfterN("a,b,c",",",2))
//将字符串以空白字符分割,并返回一个切片: [abc 123 ABC]
//将字符串以满足f(r)==true的字符分割返回切片: [abc 123 ABC xyz XYZ]
//将字符串以sep作为分隔符分割,分割后字符最后去掉sep: [a b c]
//将字符串以sep作为分隔符分割,分割后字符最后附上sep: [a, b, c]
//将字符串以sep作为分隔符分割,分割后字符最后附上sep,n决定返回的切片数: [a, b,c]
fmt.Println("将字符串s每个单词首字符大写返回: ",strings.Title("her royal highness"))
fmt.Println("将字符串s转换成大写返回: ",strings.ToTitle("her royal highness"))
fmt.Println("将字符串s转换成小写返回: ",strings.ToLower("HER ROYAL HIGHNESS"))
fmt.Println("将字符串s转换成大写返回: ",strings.ToUpper("her royal highness"))
//将字符串s每个单词首字符大写返回: Her Royal Highness
//将字符串s转换成大写返回: HER ROYAL HIGHNESS
//将字符串s转换成小写返回: her royal highness
//将字符串s转换成大写返回: HER ROYAL HIGHNESS
//fmt.Println("将字符串首尾包含在custset中的任一字符去掉返回: ",strings.Trim("a1111a","a"))
//fmt.Println("将字符串左边包含在custset中的任一字符去掉返回: ",strings.TrimLeft("a1111a","a"))
//fmt.Println("将字符串中前缀字符串prefix去掉: ",strings.TrimPrefix("hello world","hello"))
//fmt.Println("将字符串中后缀字符串suffix去掉: ",strings.TrimSuffix("hello world","world"))
//将字符串首尾包含在custset中的任一字符去掉返回: 1111
//将字符串左边包含在custset中的任一字符去掉返回: 1111a
//将字符串中前缀字符串prefix去掉: world
//将字符串中后缀字符串suffix去掉: hello
fmt.Println("按字典顺序比较a和b字符串大小: ",strings.Compare("abc","bcd"))
fmt.Println("按字典顺序比较a和b字符串大小: ",strings.Compare("bcd","abc"))
fmt.Println("按字典顺序比较a和b字符串大小: ",strings.Compare("abc","abc"))
fmt.Println("按字典顺序比较a和b字符串大小: ","abc"<"bcd")
fmt.Println("忽略大小写比较字符串大小: ",strings.EqualFold("abc","ABC"))
fmt.Println("将字符串s重复count次返回: ",strings.Repeat("*",10))
fmt.Println("字符串替换: ",strings.Replace("王老大 王老二","王","张",1))
fmt.Println("字符串替换: ",strings.Replace("王老大 王老二","王","张",2))
l := []string{"1","2","3"}
fmt.Println(strings.Join(l,"%"))
//按字典顺序比较a和b字符串大小: -1
//按字典顺序比较a和b字符串大小: 1
//按字典顺序比较a和b字符串大小: 0
//按字典顺序比较a和b字符串大小: true
//忽略大小写比较字符串大小: true
//将字符串s重复count次返回: **********
//字符串替换: 张老大 王老二
//字符串替换: 张老大 张老二
//1%2%3
Parse类函数主要功能是将字符串转换为其他类型
num, _ := strconv.ParseInt("01100001", 2, 64)
fmt.Printf("%T , %v \n", num, num)
num1, _ := strconv.ParseInt("-01100001", 10, 64)
fmt.Printf("%T , %v \n", num1, num1)
num2, _ := strconv.ParseInt("4e00", 10, 64)
fmt.Printf("%T , %v \n", num2, num2)
num3, _ := strconv.ParseFloat("3.1415926", 64)
fmt.Printf("%T , %v \n", num3, num3)
num4, _ := strconv.ParseBool("true")
fmt.Printf("%T , %v \n", num4, num4)
//int64 , 97
//int64 , -1100001
//int64 , 0
//float64 , 3.1415926
//bool , true
Format类函数主要是将其他类型格式化成字符串
s := strconv.Itoa(199)
fmt.Printf("%T,%v,长度:%d \n",s,s,len(s))
// 返回给定基数的i的字符串表示
s1 := strconv.FormatInt(-19968, 16)
fmt.Printf("%T,%v,长度:%d \n",s1,s1,len(s1))
s2 := strconv.FormatInt(-8, 2)
fmt.Printf("%T,%v,长度:%d \n",s2,s2,len(s2))
s3 := strconv.FormatUint(19968, 16)
fmt.Printf("%T,%v,长度:%d \n",s3,s3,len(s3))
s4 := strconv.FormatUint(8, 2)
fmt.Printf("%T,%v,长度:%d \n",s4,s4,len(s4))
//string,199,长度:3
//string,-4e00,长度:5
//string,-1000,长度:5
//string,4e00,长度:4
//string,1000,长度:4
username := ""
age := 0
fmt.Scanln(&username,&age)
fmt.Println("账号信息为: " ,username,age)