Golang字串函式認識(一)

OldBoy~發表於2018-08-20
package main
import (
    "fmt"
    "strings"
    "strconv"
)


func main(){
    //返回字串的(位元組)長度,相當於PHP的strlen
    str := "hello世界"  //11 ,golang的編碼統一為utf-8,字母和數字分別佔一個位元組,漢子佔用3個位元組
    // str := "hello"      //5
    fmt.Println(len(str))


    //字串遍歷
    str2 := "hello世界"
    //如果有中文,需要轉切片,不然會出現亂碼,因為是按照字串的位元組長度遍歷
    str2_r := []rune(str2)
    for i := 0; i < len(str2_r); i++ {
        fmt.Printf("%c\n",str2_r[i])
    }


    //字串轉整數
    //第一個引數是要轉化成的字串,第二個是錯誤資訊.這裡需要引用strconv包
    n, err := strconv.Atoi("123")  
    if err != nil { //如果有錯
        fmt.Println("轉換錯誤", err)
    } else {    //如果成功
        fmt.Println("轉換成功", n)
    }    


    //整數轉字串 
    str = strconv.Itoa(12345)
    fmt.Printf("str=%v, str=%T", str, str)    //str=12345, str=string


    //字串轉[]byte
    var  bytes = []byte("hello golang")
    fmt.Println(bytes) //str=12345, str=string[104 101 108 108 111 32 103 111 108 97 110 103]


    //[]byte轉字串
    str = string([]byte{97, 98, 99})
    fmt.Println(str)  //abc  的asc碼分別是97,98,99

    //十進位制轉化成2,8,16進位制,返回對應的字串
    str = strconv.FormatInt(123, 2)
    fmt.Printf("123對應的二進位制是=%v\n", str)
    str = strconv.FormatInt(123, 8)
    fmt.Printf("123對應的八進位制是=%v\n", str)
    str = strconv.FormatInt(123, 16) 
    fmt.Printf("123對應的十六進位制是=%v\n", str)
    //123對應的二進位制是=1111011
    //123對應的八進位制是=173
    //123對應的十六進位制是=7b


    //判斷一個字串中是否包含指定字串  ,相當於php中的strpos,但是php中可能會返回下標
    status := strings.Contains("hello world", "hello")
    fmt.Printf("status=%v\n", status)   //status=true

    //統計一個字串中有幾個指定的字元
    count := strings.Count("hello world", "l")
    fmt.Printf("字元存在個數:%v\n", count) //字元存在個數:3;如果沒有,則0

    //字串比較:不區分大小寫
    status = strings.EqualFold("abc", "ABC")  
    fmt.Printf("status=%v\n", status)    //status=true

    //字串比較:區分大小寫  兩個=
    fmt.Printf("status=%v", "abc" == "ABC")//status=false 
    
    //返回子字串在指定字串中第一次出現的index值(位置),如果沒有返回-1
    index := strings.Index("test_str", "s")
    fmt.Printf("index=%v", index)  //index=2
}

 

相關文章