GO语言小锤硬磕、二十 字符串处理方法

1.字符串的长度

        Go语言的编码是UTF-8,在UTF-8中一个汉字占3个字节

        如果字符串中包含中文,又想紧缺的计算字符串中字符的个数而不是占用的字节,那么必须先将字符串转换为rune类型的数组

package main
import "fmt"
func main(){
    str1 := "lnj"
    fmt.Println(len(str1))    //3
    str2 := "小孟"
    fmt.Println(len(str2))    //6

    //byte占1个字节,只能保存字符不能保存汉字,因为一个汉字占用3个字节
    arr1 := []byte(str2)
    for _,v := range arr1{
        fmt.Printf("%c",v)
    }

    //go语言中rune类型就是专门用于保存汉字
    arr2 := []rune(str)
    fmt.Println(len(arr2))   //6
    for _,v:= range arr2{
        fmt.Printf("%c",v)   //小孟
    }

}

2.查找子串在字符串中出现的位置

package main
import (
    "fmt"
    "strings"
)
func main(){
   //1.查找"字符"在字符串中第一次出现的位置,找不到返回-1
    res := strings.IndexByte("hello 小孟","l") //2 
   //2.查找汉字或字符在字符串中第一次出现的位置,找不到返回-1
    res := strings.IndexRune("hello 小孟","孟")
   //3.查找"汉字或字符"任意一个 在字符串中第一次出现为位置,找不到返回-1
    res := strings.IndexAny("hello 小孟","wzlo") //把wzlo拆开一个字符查找找到一个就会停止
   //4.查找子串第一次出现的位置,找不到返回-1
    res := strings.Index("hello 小孟","llo") //llo作为一个整体
    res := strings,Index("hello 小孟","孟")  //可以查询字符和汉字
    //5.倒序查找子串在字符串中第一次出现的位置
    res := strings.LastIndex("hello 小孟","l")
    //6.将字符串先转换为[]rune,然后遍历rune切片逐个取出传给自定义函数
    res := strings.IndexFunc("hello 小孟",custom)
    res := strings.IndexFunc("hello 小孟",func(r rune) bool{
        fmt.Printf("被调用了,当前传入的是%c\n",r)
        if r =='o'{
            return true
        }
        return false
    })
}

func custom(r rune) bool{
    fmt.Printf("被调用了,当前传入的是%c\n",r)
    if r =='o'{
        return true
    }
    return false
}

3.判断字符串是否包含子串

package main
import "fmt"
func main(){
//1.查找子串是否存在,存在返回true,不存在返回false
    res := strings.Contains("hello 小孟","llo")

//2.查找汉字或字符在字符串中是否存在
    res := strins.ContinsRune("hello 小孟","孟")

//3.查找汉字或字符中任意一个在字符串中是否存在
    res := strins.ContainsAny("hello 小孟","wzll")

//4.判断字符串是否以某个字符串开头
    res := strings.HasPrefix("lnj-book","lnj")

//5.判断字符串是否以某个字符串结尾
    res := strings.HasSuffix("lnj-book","ook")
}

4.字符串比较

package main
import(
    "strings"
    "fmt"
)
func main(){
    //比较两个字符串的大小,会逐个字符进行比较ASCII值
    res := strings.Compare("bcd","abc")    //1 第一个 > 第二个
    res := strings.Compare("abc","bcd")   //-1 第一个 < 第二个
    res := strings.Compare("bcd","bcd")   //0  第一个 = 第二个

    //判断两个字符是否相等,忽略大小写,可以判断字符和中文
    res2 := strings.EqualFold("abc","def")    //false
    res2 := strings.EqualFold("abc","abc")    //true
    res2 := strings.EqualFold("abc","ABC")    //true
    res2 := strings.EqualFold("小孟","小孟")   //true 
    
}

5.字符串转换

package main
import (
    "fmt"
    "strings"
)
func main(){

    res := strings.ToLower("ABC")    //字符串转为小写
    res := strings.ToUpper("abc")    //字符串转为大写
    res := strings.ToTitle("hello world") //转换为标题格式,都转大写
    res := strings.Title("hello world")     //首字母大写,其他字符不变
    
}

6.字符串的拆合

package main
import (
    "strings"
    "fmt"
)
func main(){
    //按照指定字符串切割原字符串
    arr1 := strings.Split("a,b,c",",")
    arr2 := strings.Split("ambmc","m")

    //按照指定字符串切割原字符串,并且指定切割为几份
    //如果最后一个参数为0,那么会范围一个空数组
    arr3 := strings.SplitN("a,b,c",",",2)    //[a b,c]
    arr4 := strings.SplitN("a,b,c",",",0)    //[]

    //按照指定字符串切割原字符串,切割是包含指定字符串
    arr5 := strings.SplitAfer("a,b,c",",")    //[a, b, c]

    //按照指定字符串切割原在字符串,切割时包含制定个字符串,并且指定切割为几份
    arr6 := strings.SplitAfterN("a,b,c",",",2)    //[a, b,c]

    //将字符串切片按照指定连接符号转换为字符串
    sce := []string{"aa","bb","cc"}
    str1 := strings.Join(sce,"_")  //aa_bb_cc

    //返回num个字符串串联的指定字符串
    str2 := strings.Repeat("abc",2)    //abcabc

    //字符串的替换(需要替换的字符串  旧字符串  新字符串  替换数量)
    str3 := strings.Replace("xxxmmmxm","xm","oo",-1) //xxoommoo  -1表示都替换

    //按照空格切割字符串,多个空格会合并为一个空格处理
    arr7 := strings.Fields("a   b  c     c  d")   //[a b c c d]

    //将字符串转换成切片传递给函数之后由函数决定如何切割
    arr8 :=strings.FieldsFunc("a,b,c",custom)
}

func custom(r rune) bool{
    fmt.Print("被调用了,当前传入的是%c\n",r)
    if r == ','{
        return true
    }
    return false
}

7.字符串的清理

package main
import(
    "strings"
    "fmt"
)
func main(){
    //去除字符串两端指定字符
    str1 := strings.Trim("!!!小!!!孟!!","!")  //小!!!孟
    //去除字符串左端指定字符
    str2 := strings.TrimLeft("!!!小!!!孟!!","!")    //小!!!孟!!
    //去除字符串右端指定字符
    str3 := strings.TrimLeft("!!!小!!!孟!!","!")    //!!!小!!!孟
    //去除字符串两端的空格
    str4 := strings.TrimSpace("   xiaomeng  ")    //xiaomeng
    //取出字符串开头的指定字符
    str5 := strings.TrimPrefix("xiaomeng","xia")  //omeng
    str6 := strings,TrimSuffix("xiaomeng","eng")  //xiaom  

    //按照方法定义规则,去除字符串两端符合规则内容
    str5 := strins.TrimFunc("!!!xiao!!!men!!!",custom)
    str5 := strins.TrimLeftFunc("!!!xiao!!!men!!!",custom)
    str5 := strins.TrimRightFunc("!!!xiao!!!men!!!",custom)
    
}

func custom(r rune) bool{
    fmt.Print("被调用了,当前传入的是%c\n",r)
    if r == '!'{
        return true
    }
    return false
}

你可能感兴趣的:(go语言基础,golang,servlet,java)