1. 程式人生 > >Go語言學習筆記11--字串操作

Go語言學習筆記11--字串操作

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"