package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
str := "hello你好" //一个中文字符占用三个字节
// 1. 统计字符串长度 len(str)
fmt.Println(len(str)) //11
// 2. 字符串遍历,同时处理有中文的问题 - 切片遍历
r := []rune(str)
for i := 0; i < len(r) ;i++ {
fmt.Printf("%c ",r[i])
}
fmt.Println() //h e l l o 你 好
// 3. 字符转与整数的相互转化
// Atoi
n,err := strconv.Atoi("333")
// s=hello 输出 strconv.Atoi: parsing "hello": invalid syntax
if err != nil {
fmt.Println("转换错误",err)
}else {
fmt.Println(n) //333
}
//Itoa
s := strconv.Itoa(33333)
fmt.Println(s) //33333
// 4. 字符串转 []byte byte直接输出为ascii码
var bytes = []byte(str)
fmt.Println(bytes) //[104 101 108 108 111 228 189 160 229 165 189]
// 5. []byte 转换为字符串
str5 := string(bytes)
fmt.Println(str5) //hello你好
// 6. 10进制转化为 2,8,16进制
//整数,进制 返回string
fmt.Println(strconv.FormatInt(666,16)) //29a
// 7. 匹配子串
fmt.Println(strings.Contains("abcdefg","abc")) //true
// 8. 统计匹配子串个数
fmt.Println(strings.Count("abcdefeee","e")) //4
// 9. 字符串比较
//区分大小写 ==
fmt.Println("abc"=="abC") //false
//不区分大小写
fmt.Println(strings.EqualFold("abc","ABC")) //true
// 10. 返回子串出现index值,找不到则返回-1
fmt.Println(strings.Index("abcdefgcde","cde")) //2
fmt.Println(strings.LastIndex("abcdefgcde","cde")) //7
// 11. 子串替换,最后指定替换几个 -1表示全部替换
str11 := strings.Replace(str,"hello","tomorrow",-1)
fmt.Println(str11) //tomorrow你好
fmt.Println(str) //hello你好
// 12. 字符串分割成数组
split := strings.Split("a,b,c,d,e,f", ",")
fmt.Println(split) //[a b c d e f]
// 13. 大小写转化
str13 := "goLang,HEllo"
fmt.Println(strings.ToLower(str13)) //golang,hello
fmt.Println(strings.ToUpper(str13)) //GOLANG,HELLO
fmt.Println(str13) //goLang,HEllo
// 14. 字符串掐头去尾 trim
str14 := " !d d ?d !??"
//去掉左右空格
fmt.Println(strings.TrimSpace(str14)) //!d d ?d !??
//指定去掉两边字符
fmt.Println(strings.Trim(str14,"?! ")) //d d ?d
//TrimLeft 只去掉左边
//TrimRight 只去掉右边
// 15. 判断头尾
fmt.Println(strings.HasPrefix("abcdefg","abc")) //true
fmt.Println(strings.HasSuffix("abcdefg","fg")) //true
}