strings、strconv:让你高效的处理字符串
strings包strings.HasPrefix(s,prefix string) bool
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
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.HasSuffix("你是谁啊","谁")) //false fmt.Println(strings.HasSuffix("你是谁啊","谁啊"))//true } strings.Index(s,substr string) int
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
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
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
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
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
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.ToLower("aBc")) //abc fmt.Println(strings.ToLower("ABc")) //abc } strings.ToUpper(s string) string
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.ToUpper("aBc")) //ABC fmt.Println(strings.ToUpper("ABc")) //ABC } strings.TrimSpace(s string) string
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.TrimSpace(" aBc ")) //aBc } strings.Trim(s string,cutset string) string
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
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
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
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
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
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
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.Join([]string{"a","蛤","嗝"},"^_^")) //a^_^蛤^_^嗝 } strconv包strconv.Atoi(s string) (int,error)
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
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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 使用表单身份验证的MVC3中的简单授权
- 如何默认使用IE来测试我的ASP.NET应用程序?
- 我可以在ASP.NET应用程序中禁用IP地址(或一系列地址)吗?
- asp.net-mvc-5 – 使用Glass Mapper的Sitecore 8可编辑字段
- asp.net-mvc – 在MVC控制器中复制代码
- 在UNC路径上安装ASP.NET应用程序,您认为这可能吗?
- asp.net-mvc – asp.net MVC扩展DataAnnotions
- asp.net – 通过Web服务访问连接字符串
- asp.net-core-mvc – 如何在Asp.net Core MVC(又名Asp.Net
- 如何使用ASP.NET和iframe对跨域的用户进行身份验证?
- asp.net-mvc – 如何在asp.net中使用Captcha mvc
- asp.net – 如何使用Docx dll生成word文档时在标
- asp.net-mvc – ASP.NET MVC 4 – ModelBinder错
- asp.net-mvc – ASP.Net MVC Kendo Grid的自定义
- asp.net – Cookies和子域名
- asp.net-mvc – 如何在ASP.NET MVC中执行辅助操作
- asp.net-mvc – 使用URL重写时Url.Action不正确
- rest – 使用WebAPI删除多个ID删除端点?
- asp.net-mvc – 使用输出缓存和其他动作过滤器
- asp.net-mvc-3 – mvc3 – 在不同的区域使用部分