美文网首页GoGo语言实践Golang
Go学习笔记-字符串和正则表达式

Go学习笔记-字符串和正则表达式

作者: 赵客缦胡缨v吴钩霜雪明 | 来源:发表于2019-05-30 14:40 被阅读16次

    字符串

    字符串长度

    1. 获取字符串长度: len()
    2. 注意点:len()函数获取字符串长度的时候, 获取的是字节数.一个中文占三个字节
    3. 如果想获得的是中文个数,需要将字符串转换为rune类型的切片才行
    str1 := "你好"
    fmt.Println(len(str1)) // 6
    
    rune1 := []rune(str1)
    fmt.Println(len(rune1)) // 2
    

    查找字符串

    查找子串在字符串中出现的位置
    1.从左至右查找
    func IndexByte(s string, c byte) int
    func IndexRune(s string, r rune) int
    //如果找到了就返回字符在字符串中的位置, 如果没有找到就会-1
    //在返回找到的索引的时候, 如果前面有中文, 那么一个中文按照3个索引计算
    
    func IndexAny(s, chars string) int
    // 注意点: 从左至右的查找, 一旦找到了, 就不会继续查找的
    // 查找时不是将第二个参数当做一个整体查找, 是==拆开==来查找, 返回找到的最前面一个值
    
    func Index(s, sep string) int
    //注意点: 从左至右的查找, 一旦找到了, 就不会继续查找的
    //查找时会将第二个参数当做一个==整体==查找
    
    func IndexFunc(s string, f func(rune) bool) int
    // 注意点: 从左至右的查找, 一旦找到了, 就不会继续查找的
    // IndexFunc方法会将字符串转换成一个[]rune, 然后遍历切片,
    // 逐个将切片中的元素传递给自定义的函数,只要自定义函数返回true就代表找到了
    
    2.从右至左查找
    func LastIndex(s, sep string) int
    func LastIndexByte(s string, c byte) int
    func LastIndexAny(s, chars string) int
    func LastIndexFunc(s string, f func(rune) bool) int
    

    字符串包含

    func Contains(s, substr string) bool
    // 作用: 判断字符串中是否包含指定的子串
    // 如果包含返回true, 如果不包含返回false
    
    func ContainsRune(s string, r rune) bool
    // 作用:判断字符串中是否包含指定的字符
    // 如果包含返回true,如果不包含返回false
    
    func ContainsAny(s, chars string) bool
    // 作用:判断字符串中是否包含指定的子串中任意一个字符
    // 如果包含返回true,如果不包含返回false
    
    func HasPrefix(s, prefix string) bool
    // 作用:判断字符串是否以指定字符串开头
    
    func HasSuffix(s, suffix string) bool
    // 作用:判断字符串是否以指定字符串结尾
    

    字符串比较

    func Compare(a, b string) int
    // 比较两个字符串
    // 如果两个字符串相等,那么返回0
    // 如果两个字符串不相等
    // 第一个字符串 > 第二个字符串 返回 1
    // 第一个字符串 < 第二个字符串 返回 -1
    str1 := "www.123.com" //0
    str2 := "www.321.com" //-1
    str2 := "www.111.com" //1
    res := strings.Compare(str1, str2)
    
    
    func EqualFold(s, t string) bool
    // 比较两个字符串是否相等, 相等返回true, 不相等返回false
    str1 := "www.123.com"
    str2 := "www.123.com"  
    res := strings.EqualFold(str1, str2) //true
    

    字符串转换

    //字符串转换
    func ToUpper(s string) string
    // 作用:将指定字符串中所有的小写字母转换成大写
    // 注意点:会生成一个新的字符串, 不会影响原有的字符串
        str1 := "www.123abc.com"
        str2 := strings.ToUpper(str1)
        fmt.Println(str2) //WWW.123ABC.COM
    
    func ToLower(s string) string
    // 作用:将指定字符串中所有的大写字母转换成小写
    // 注意点:会生成一个新的字符串, 不会影响原有的字符串
    
    func ToTitle(s string) string
    // ToTitle 和 ToUpper 会将小写转换为大写
    
    func ToUpperSpecial(_case unicode.SpecialCase, s string) string
    func ToLowerSpecial(_case unicode.SpecialCase, s string) string
    func ToTitleSpecial(_case unicode.SpecialCase, s string) string
    
    func Title(s string) string
    // 作用: 将单词的首字母大写, 单词之间用空格或者-隔开
    

    字符串拆合

    1. 字符串切割
    func Split(s, sep string) []string
    // 作用:按照指定字符串切割原有字符串
    // 注意点: 切割之后的结果, 不包含指定的字符串
         
    func SplitN(s, sep string, n int) []string
    // 作用:按照指定字符串切割原有字符串, 切割为指定的份数
    // 注意点: 切割之后的结果, 不包含指定的字符串
    str1 := "www.123.abc,qwe com"
    str2 := strings.SplitN(str1,".", 2)
    fmt.Println(str2, len(str2)) //2
        
    func SplitAfter(s, sep string) []string
    // 作用:按照指定字符串切割原有字符串
    // 注意点: 切割之后的结果, 包含指定的字符串
    
    func SplitAfterN(s, sep string, n int) []string
    //切割为指定的分数
    
    1. 按照空格切割字符串
    func Fields(s string) []string
    // 作用:按照空格切割原有字符串
    // 注意点:连续的多个空格会按照一个空格来处理
    str2 := strings.Fields(str1)
    
    func FieldsFunc(s string, f func(rune) bool) []string
    // 作用: 函数返回true就切割, 返回false就不切割
    
    1. 字符串合并
    func Join(a []string, sep string) string
    // 作用:按照指定字符连接切片中的元素
    
    sce1 := []string{"www", "123",  "com"}
    str1 := strings.Join(sce1,".") 
    fmt.Println(str1)//www.123.com
    
    1. 重复生成字符串
    func Repeat(s string, count int) string
    // 作用:将原有字符串重复指定次数后生成一个新的字符串
    
    1. 替换重复生成字符串
    func Replace(s, old, new string, n int) string
    // 作用: 将原有字符串中的, 指定字符串替换为新的字符串
    // 最后一个参数用于指定替换多少个, 如果传入-1全部都替换
    

    字符串清理

    func Trim(s string, cutset string) string
    // 作用:返回字符串前后两端去掉指定字符串之后的新字符串
    
    func TrimLeft(s string, cutset string) string
    func TrimRight(s string, cutset string) string
    // TrimLeft 只去除左边的
    // TrimRight 只去除右边的
         
    func TrimFunc(s string, f func(rune) bool) string
    // 作用: 去除指定字符
    // 注意点: true去除
    
    func TrimSpace(s string) string
    // 作用: 去除两端的空格
    
    func TrimPrefix(s, prefix string) string
    func TrimSuffix(s, suffix string) string
    // 作用:去除前后缀
    

    正则表达式

    1. 正则表达式是一个特殊的字符串, 用于过滤其它的字符串
    //需求:取出字符串中所有的123
    //1. 定义一个字符串
    str := "www.123abcnmb321div123.com"
    //2. 创建一个正则表达式对象
    regx, _:= regexp.Compile("321")
    //3. 利用正则表达式对象, 匹配指定的字符串
    res := regx.FindAllString(str, -1)
    fmt.Println(res)
    
    //1.从字符串中提取电话号码
    str1 := "李abc13554499311def江15812345678def"
    regx, _ := regexp.Compile("1\\d{10}")//[13554499311 15812345678]
    res := regx.FindAllString(str1, -1)
    fmt.Println(res)
    
    
    //2.从字符串中提取邮箱
    str1 := "今天天气很好97606813@qq.cn你吃饭了吗?linanjiang@it666.com"
    regx, err := regexp.Compile("[a-zA-Z0-9_]+@[a-zA-Z0-9]+\\.[a-zA-Z]+")
    res := regx.FindAllString(str1, -1)
    fmt.Println(res) //[97606813@qq.cn linanjiang@it666.com]
    fmt.Println(err) //<nil>
    

    时间和日期

    1. 获取当前时间:package time
    2. 格式:time.Now()
    3. 格式:now.年月日时分秒的英文
    tm := time.Now()
    str := fmt.Sprintf("当前时间是: %d-%d-%d %d:%d:%d ", tm.Year(), tm.Month(),
            tm.Day(), tm.Hour(), tm.Minute(), tm.Second())
    fmt.Println(str) //当前时间是: 2019-2-7 20:35:1
    
    1. 时间常量常见的就是配合休眠函数一起使用
    for{
        time.Sleep(time.Second)
        //time.Sleep(time.Millisecond * 1000)
        fmt.Println("打印了")
        }
    
    1. Go中的时间戳是从1970年1月1日开始计算的
    2. Unix:返回当前时间距离1970年1月1日有多少秒
    3. UnixNano:返回当前时间距离1970年1月1日有多少纳秒
    fmt.Println(time.Now().Unix()) // 1549543386
    fmt.Println(time.Now().UnixNano()) // 1549543402102909300
    
    // 创建随机数种子(一定要保证每次运行随机因子都不一样才能真正的生成随机数)
    rand.Seed(time.Now().UnixNano())
    //生成随机数
    res := rand.Intn(3)
    fmt.Println(res)
    

    相关文章

      网友评论

        本文标题:Go学习笔记-字符串和正则表达式

        本文链接:https://www.haomeiwen.com/subject/bvfvtctx.html