加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

strings、strconv:让你高效的处理字符串

发布时间:2020-12-16 09:43:05 所属栏目:asp.Net 来源:网络整理
导读:strings包 strings.HasPrefix(s,prefix string) bool 判断字符串s是否以prefix开头。类似于python中的startswith。 package mainimport ( "fmt" "strings")func main(){ fmt.Println(strings.HasPrefix("http://www.bilibli.com","https"))//false fmt.Print

strings包


strings.HasPrefix(s,prefix string) bool

判断字符串s是否以prefix开头。类似于python中的startswith。

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.HasPrefix("http://www.bilibli.com","https"))//false
    fmt.Println(strings.HasPrefix("http://www.bilibli.com","http"))//true
}

strings.HasSuffix(s,suffix string) bool

判断字符串s是否以suffix结尾,类似于python中的endswith

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.HasSuffix("你是谁啊","谁")) //false
    fmt.Println(strings.HasSuffix("你是谁啊","谁啊"))//true
}

strings.Index(s,substr string) int

判断子串substr在字符串s中首次出现的位置,如果没有则返回-1,类似于python中的find

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Index("我是一匹风中的狼","风")) //12
    fmt.Println(strings.Index("我是一匹风中的狼","疯"))//-1
    //首先第二个返回-1很好理解,但是第一个为什么返回12,如果在python中会返回4
    //但是由于golang不是unicode,而是按照字节算的,一个汉字占三个字节,所以是12
    //0-1-2 3-4-5 6-7-8 9-10-11,所以是12
}

strings.LastIndex(s,substr string) int

判断子串substr在子串中最后一次出现的位置,类似于python中的rfind,如果没有,返回-1

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.LastIndex("abcabcabc","c")) //8
    fmt.Println(strings.Index("abcabcabc","d"))//-1
}

strings.Replace(s,old,new string,n int) string

将字符串s中old替换为new,n为替换的个数,如果为-1,则全部替换,类似于python中的replace

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Replace("abcabcabc","c","d",2)) //abdabdabc
    fmt.Println(strings.Replace("abcabcabc",-1)) //abdabdabd
}

strings.Count(s,substr string) int

计算字符串s中,子串substr出现的次数,类似于python中的count

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Count("abcabcabc","a")) //3
    fmt.Println(strings.Count("abcabcabc","d")) //0
}

strings.Repeat(s string,count int) string

将字符串s重复count次,类似于python中的s * count

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Repeat("abc",3)) //abcabcabc
    fmt.Println(strings.Repeat("abc",1)) //abc
}

strings.ToLower(s string) string

将字符串s转成小写,类似于python中的lower

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.ToLower("aBc")) //abc
    fmt.Println(strings.ToLower("ABc")) //abc
}

strings.ToUpper(s string) string

将字符串s转成大写,类似于python中的upper

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.ToUpper("aBc")) //ABC
    fmt.Println(strings.ToUpper("ABc")) //ABC
}

strings.TrimSpace(s string) string

去掉字符串s首尾空格,类似于python中的strip

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.TrimSpace("    aBc   ")) //aBc
}

strings.Trim(s string,cutset string) string

对字符串s的两端进行搜索,如果字符再cutset里面,那么就删掉,直到出现一个不在cutset里面的字符为止。仍类似于python中的strip

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Trim("abbb我是来自东方的狼bbba","ab")) //我是来自东方的狼
    fmt.Println(strings.Trim("abbcb我是来自东方的狼cbbba","ab")) //cb我是来自东方的狼c
}

strings.TrimLeft(s string,cutset string) string

和Trim类似,不过TrimLeft是去除左边的字符,类似于python中lstrip

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.TrimLeft("abbb我是来自东方的狼bbba","ab")) //我是来自东方的狼bbba
    fmt.Println(strings.TrimLeft("abbcb我是来自东方的狼cbbba","ab")) //cb我是来自东方的狼cbbba
}

strings.TrimRight(s string,cutset string) string

和Trim类似,不过TrimRight是去除右边的字符,类似于python中rstrip

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.TrimRight("abbb我是来自东方的狼bbba","ab")) //abbb我是来自东方的狼
    fmt.Println(strings.TrimRight("abbcb我是来自东方的狼cbbba","ab")) //abbcb我是来自东方的狼c
}

strings.Fields(s string) []string

对字符串s按照空格分割,返回一个切片,类似于python中的split

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Fields("when    i   was   young")) //[when i was young]
}

strings.Split(s,sep string) []string

对s按照sep进行分割,还是类似于python中的split

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Split("abc|abc|abc","|")) //[abc abc abc]
}

strings.SplitN(s,sep string,n int) []string

对s按照sep分割,但是只分割n-1个,为什么是n-1,这里表示的是到第n个分割符就不分了。仍然类似于python中的split

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.SplitN("abc|abc|abc|cca|aae|aaa","|",4)) //[abc abc abc cca|aae|aaa]
    //n=4表示到第4个|就不分割了,总共五个,还剩下两个|
    //值得一提的是,如果n=0,得到空切片,
    // n=1,第一个分割符就停止了,相当于没分隔,但得到的是由一个原始的字符串组成的切片
    //n<0表示全部分割
    fmt.Println(strings.SplitN("abc|abc|abc|cca|aae|aaa",1)) //[abc|abc|abc|cca|aae|aaa]
    fmt.Println(strings.SplitN("abc|abc|abc|cca|aae|aaa",-1)) //[abc abc abc cca aae aaa]
}

strings.Join(a []string,sep string) string

将切片s里面的元素用sep连接起来,类似于python中的join

package main

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(strings.Join([]string{"a","蛤","嗝"},"^_^"))  //a^_^蛤^_^嗝
}


strconv包


strconv.Atoi(s string) (int,error)

将字符串转化为int

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num,err:=strconv.Atoi("123")
    if err!=nil{
        fmt.Println(err)
    }else{
        fmt.Printf("%d %Tn",num,num)  //123 int
    }

    num,err=strconv.Atoi("aaa123")
    if err!=nil{
        fmt.Println(err)  //strconv.Atoi: parsing "aaa123": invalid syntax
    }else{
        fmt.Printf("%d %Tn",num)
    }
    //只有字符串里面的元素全为int类型时,才可以转换

    num,err=strconv.Atoi("000123")
    if err!=nil{
        fmt.Println(err)
    }else{
        fmt.Printf("%d %T",num) //123 int
    }
    //可以看到如果开头是0的话,转化为int之后,会自动截断
}

strconv.Itoa(i int) string

将int转化为string类型

package main

import (
    "fmt"
    "strconv"
)

func main() {
    s := strconv.Itoa(123)
    fmt.Printf("%q %Tn",s,s) // "123" string
    /*
    熟悉python的小伙伴或许有疑问了,我能不能这么转呢?string(123)
    答案是不行的,如果这样的话,那么123会被当成ascii码来处理
     */
    //比如
    a := 'c'
    fmt.Println(a)         //99
    fmt.Println('c' + 100) //199
    //可以看到字节实际上对应的是ascii码,字符串底层则是对应的字节数组

    //byte相当于uint8的别名
    b := []byte{97,98,99,'d'}
    fmt.Println(b) // [97 98 99 100]
    //可以将字节数组转为string,会将底层的字节全部拼接起来。
    fmt.Println(string(b)) //abcd
    //既然byte是unit8的别名,那就意味这数组的最大值不能超过255,那汉字怎么表示呢?可以使用rune
    //rune相当于是uint32的别名
    r := []rune{'我','要','艹','你','啊'}
    //可以看到字节底层对应的就是一个数字
    fmt.Println(r)         // [25105 35201 33401 20320 21834]
    fmt.Println(string(r)) //我要艹你啊
    //因此如果我使用string的方式转换int的话
    fmt.Println(string(25105),string(35201),string(33401)) //我 要 艹
    //实际上是将这些数字对应的单个字符转换成了字符串。
    //因为我们要使用string.Itoa的方式,或者使用SPrintf,SPrint等方法
    //同理,字符串转int,也不能使用int("123")这种方式
    str := fmt.Sprintf("my age is %d",16)
    fmt.Println(str)  //my age is 16
    str = fmt.Sprint("my age is ",16)
    fmt.Println(str)  //my age is 16
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读