1.字符串操作
(1)字符串操作函数
和JavaScript这种将所有的操作方法直接固化到数据类型的类别中不同,
go语言将字符串的操作方法单独封装了一个strings包,
因此每次使用字符串操作方法都必须通过strings包来完成调用。
常见的字符串操作方法有如下8种:
1)strings.Contains方法
语法:func Contains(str,substr string)bool
说明:判断字符串str中是否包含substr,返回布尔值
fmt.Println(strings.Contains("abcdef","bc"));//true
2)strings.Join方法
语法:func Join(strSlice[] string, sep string) string
说明:将切片strSlice中的内容,以sep分隔符链接起来构成一个完整的字符串
strSlice := []string{"aa","bb","cc"}
fmt.Println(strings.Join(strSlice, "-"))//aa-bb-cc
3)strings.Index方法
语法:func Index(str,subStr string)int
说明:在str中查找subStr字符串第一次出现的下标,未能找到返回-1
idx1 := strings.Index("abcdeabcde","a");
idx2 := strings.Index("abcdeabcde","k");
fmt.Println(idx1,idx2);//0 -1
4)strings.Repeat方法
语法: func Repeat(str string, count int)string
说明:将字符串str重复count次后,构成新的字符串返回,但是count不能小于0
fmt.Println(strings.Repeat("(frank)",3));//(frank)(frank)(frank)
5)strings.Replace方法
语法:func Replace(str,oldSub,newSub string, times int)string
说明:将字符串中str的oldSub替换为newSub,并构成一个新的字符串返回,对原字符串不会造成任何影响
times表示要替换进行多少次,0表示不替换,负数表示全部替换。
str := "abcde-abcde-abcde";
result1 := strings.Replace(str, "ab", "00", -1);
result2 := strings.Replace(str, "ab", "00", 0);
result3 := strings.Replace(str, "ab", "00", 2);
fmt.Println(result1); //00cde-00cde-00cde
fmt.Println(result2); //abcde-abcde-abcde
fmt.Println(result3); //00cde-00cde-abcde
fmt.Println(str); //abcde-abcde-abcde
6)strings.Split方法
语法:func Split(str,sep string)[]string
说明:将字符串str按照sep进行分割,将分割之后的结果构成一个字符串切片返回
若无法进行分割,则将原字符串作为一个切片元素构成切片返回
本方法不会对原有的字符串造成任何影响
str := "abcde-fghij-klmno";
slice1 := strings.Split(str, "-");
slice2 := strings.Split(str, "++");
fmt.Println(slice1); //[abcde fghij klmno]
fmt.Println(slice2); //[abcde-fghij-klmno]
fmt.Println(str); //abcde-fghij-klmno
7)strings.Trim方法
语法:func Trim(str,cutstr string)string
说明:从字符串str的起始位置和结束位置删除cutstr字符,如果存在多个则都删除
并构成一个新的字符串返回,本方法不会对原有的字符串造成任何影响
str := " ab c de ";
result := strings.Trim(str, " ");
fmt.Printf("==%s==\n",result); //==ab c de==
fmt.Printf("==%s==",str); //== ab c de ==
8)strings.Fields方法
语法:func Fields(str string)[]string
说明:本方法会默认采用空格对字符串str进行切割,并构成字符串切片返回。
如果不存在空格或空格出现在起始位置或者结束位置,
那么就将原所有的空格去掉的字符串当做是单一切片元素构成切片返回
本方法对原字符串不会造成任何影响
str1 := " a b c de ";
result1 := strings.Fields(str1);
fmt.Println(result1); //[a b c de]
fmt.Println(len(result1)); //4
fmt.Printf("===%s====\n",str1); //=== a b c de ====
str2 := " abcde ";
result2 := strings.Fields(str2);
fmt.Println(result2); //[abcde]
fmt.Println(len(result2)); //1
fmt.Printf("===%s====\n",str2); //=== abcde ====
(2)字符串转换函数
与传统编程语言相比,go语言中对于字符串与其他数据格式的相互转换操作方法十分丰富。
这些方法被封装到strconv包中
1)strconv.Format格式化系列函数(将其他数据类型转换成字符串类型)
·func FormatBool(b bool)string
说明: 能够将布尔值的内容转换为字符串类型
str1:=strconv.FormatBool(true)
fmt.Printf("%s---%T",str1,str1);//true---string
·func FormatFloat(f float64, fmt byte, perc int, bitSize int)string
说明:能够将浮点数类型数据转换成字符串类型,其中
第一个参数是待转换的数字变量
第二个参数是格式化输出的类型,写'f'表示float,固定写法
第三个参数是表示保留小数点后多少位有效数字(四舍五入)
第四个参数是表示按照float多少精度输出,可以选择32或64.
str2 := strconv.FormatFloat(10.012345,'f',5,64);
fmt.Printf("%s---%T",str2,str2);//10.01235---string
·func FormatInt(i int64, binary int64)string
func FormatUint(i uint64, binary uint64)string
说明:能够将整数类型按照进制标准转换成字符串类型
第二个参数表示进制,写成几进制就会将整数转换成对应进制。
str3:=strconv.FormatInt(10,2)
fmt.Printf("%s---%T",str3,str3);//1010---string
2)strconv.Parse数据解析系列函数(将字符串类型数据转换为其他类型数据)
·func ParseBool(str string)(b bool, err error)
说明:能够将字符串类型数据转换成布尔类型数据
但如果数据不能被正确转换,那么默认结果是false,需要借助于err来进行判断
str1 = "true";
b1,err1 := strconv.ParseBool(str1);
fmt.Println(b1);//true
fmt.Println(err1);//nil
str2 = "true123";
b2,err2 := strconv.ParseBool(str2);
fmt.Println(b2);//false
fmt.Println(err2);//strconv.ParseBool:parsing "true123":invalid syntax
·func ParseFloat(str string, bitSize int)(f float, err error)
说明:能够将字符串类型转换成浮点数类型
但是如果数据不能被正确转换,那么默认结果是0.000000,需要借助于err来进行判断
第一个参数是待转换的字符串
第二个参数是数据采用多少位,通常64固定
str3 := "1.23456789";
result3,err3 := strconv.ParseFloat(str3,64);
fmt.Println(result3);//1.234568
fmt.Println(err3);//nil
str4 := "1.23456789aa";
result4,err4 := strconv.ParseFloat(str4,64);
fmt.Println(result4);//0.000000
fmt.Println(err4);//strconv.ParseFloat:parsing "1.23456789aa":invalid syntax
·func ParseInt(str string, base int, bitSize int)(num int, err error)
说明:能够将字符串类型数据转换成整数类型数据
但是如果数据不能被正确转换,那么默认结果是0,需要借助于err来进行判断
第一个参数是待转换的字符串
第二个参数是参与转换的数字是几进制
第三个参数是数据采用多少位,通常64固定
str5 := "123"
i5,err5 := strconv.ParseInt(str5,10,64);
fmt.Println(i5);//123
fmt.Println(err5)//nil
str6 := "123abc"
i6,err6 := strconv.ParseInt(str6,10,64);
fmt.Println(i6);//0
fmt.Println(err6)//strconv.ParseInt:Parsing "123ddd": invalid syntax
ps:
strconv包中有直接将字符串转换成十进制的快捷方法Atoi
value,_ := strconv.Atoi("123");
fmt.Println(value);//123
3)strconv.Append数据添加系列函数(将其他数据类型以字符形式添加到指定字符串中)
·func AppendBool(b []byte, bool bool)[]byte
说明:能够将布尔类型拆分成一系列字符,然后追加到指定字符切片中返回。
b1 := make([]byte,0);
b1 = strconv.AppendBool(b1,false);
fmt.Println(b1);//[102 97 108 115 101]
fmt.Println(string(b1));//false
·func AppendInt(b []byte, i int, base int)[]byte
说明:能够将整数类型转换成字符串类型,然后再拆分成一系列字符追加到指定字符切片中返回
b2 := make([]byte,0);
b2 = strconv.AppendInt(b2,123,10);
fmt.Println(string(b2));//123
b2 = strconv.AppendInt(b2,123,2);
fmt.Println(string(b2));//1111011
·func AppendFloat(b []byte, f float, fmt byte, perc int, bitSize int)[]byte
说明:能够将浮点数类型转换成字符串类型,然后再拆分成一系列字符追加到指定字符切片中返回
b3 := make([]byte,0);
b3 = strconv.AppendFloat(b3,1.123456,'f',5,64);
fmt.Println(string(b3));//1.12346 小数点也被放到了切片内部
·func AppendQuote(b []byte, s string)[]byte
说明:能够直接将字符串拆分放入字符切片内部,字符串的双引号也能被带入
b4 := make([]byte,0);
b4 = strconv.AppendQuote(b4, "hello");
fmt.Println(string(b4));//"hello"