Go基礎-字串函式

rockygao發表於2022-02-23

作為一個開發者,對於字串的處理一般都很常用,整理一下,希望能幫到一些同學

package main

import (
    "fmt"
    "strconv"
    "strings"
)

// 統計長度:len(str) 內建函式不要引入包包,一個漢字三個位元組
// 遍歷含有中文的字串,需要用切片 r := []rune(str)
// 字串轉整數 strconv.Atoi("123")
// 整數轉字串 strconv.Itoa(12345)
func main() {
    //統計長度:len(str) 內建函式不要引入包包,一個漢字三個位元組
    str := "hello北"
    fmt.Println("str len = ", len(str))

    //遍歷含有中文的字串,需要用切片 r := []rune(str)
    str1 := "hello北京"
    str2 := []rune(str1)
    for i := 0; i < len(str2); i++ {
        fmt.Printf("字元=%c\n", str2[i])
    }

    //字串轉整數 strconv.Atoi("123")
    n, err := strconv.Atoi("123")
    if err != nil {
        fmt.Println("轉換錯誤:", err)
    } else {
        fmt.Println("轉換結果:", n)
    }

    //整數轉字串 strconv.Itoa(12345)
    str3 := strconv.Itoa(12345)
    fmt.Printf("str3 = %v,str3 = %T \n", str3, str3)

    // 字串 轉 []byte
    var bytes = []byte("hello go")
    fmt.Printf("byte %v\n", bytes)
    // []byte 轉字串: str = string([]byte{97,98,99})
    str4 := string([]byte{97, 98, 99})
    fmt.Printf("str4 %v\n", str4)

    // 10進位制,轉2、8、16進位制 strconv.FormatInt(123,2) 返回對應的字串
    str = strconv.FormatInt(123, 2)
    fmt.Printf("str 二進位制 %v\n", str)

    str = strconv.FormatInt(123, 16)
    fmt.Printf("str 16進位制 %v\n", str)

    // 查詢子串是否在指定的字串中:strings.Contains("seafoo","foo")  //true
    is_check := strings.Contains("seafoo", "foo")
    fmt.Printf("is_check is %v \n", is_check)

    // 統計一個字元中,有幾個指定的子串 strings.Count("apple","p")
    num := strings.Count("apple", "p")
    fmt.Printf("有 %v個\n", num)

    fmt.Println(strings.Count("cheese", "e")) // 3
    fmt.Println(strings.Count("five", ""))    // before & after each rune   // 5

    // 不區分大小寫的字串比較(== 是區分大小寫的):fmt.Println(strings.EqualFold("abc","ABC"))
    b := strings.EqualFold("abc", "ABC") // strings.EqualFold 不區分大小寫
    fmt.Println("strings.EqualFold 判斷", b)
    fmt.Println("==判斷", "abc" == "Abc") // == 區分大小寫

    // 返回子串在一個字串中第一次出現的index值,如果沒有則返回-1
    // 也可用於判斷是否存在  strings.Index("apple","p")
    index := strings.Index("this is an apple", "p")
    fmt.Println("第一次出現的index值是 ", index)

    // 返回子串在字串中出現的最後一次的位置,如果沒有則返回-1  , strings.LastIndex("this is an apple", "p")
    index = strings.LastIndex("this is an apple", "p")
    fmt.Println("最後一次出現index值是 ", index)

    // 將指定的子串替換成另一個子串 strings.Replace("go golang", "go", "go語言", n)
    // 在字串 go golang 中 把 go 替換成 go語言  n標識希望替換幾個,如果-1則全部替換
    str = strings.Replace("go go hello", "go", "hi", -1)
    fmt.Println("替換後 ", str)

    // 按照指定的某個字元,為分割標識,將一個字串拆分成字串陣列 strings.Split("Tom go to school"," ")
    strArr := strings.Split("Tom go to school", " ")
    fmt.Printf("strArr %v\n", strArr)

    // 將字串進行大小寫轉換 strings.ToLower(str) 是轉小寫  strings.ToUpper(str) 是轉大寫
    str = "Tom go to school"
    str = strings.ToLower(str)
    fmt.Printf("str ToLower is:  %v\n", str)
    str = strings.ToUpper(str)
    fmt.Printf("str ToUpper is: %v\n", str)

    // 將字串左右兩邊的空格去掉strings.TrimSpace("  aaa bbb  ")
    str = "   Tom go to school   "
    str = strings.TrimSpace(str)
    fmt.Printf("str TrimSpace is=|%v|\n", str)

    // 將字串左右兩邊指定的字元去掉 strings.Trim("**aa bb ++", " **++") 去掉兩邊的 空格、**、++
    str = "** ++Tom **go to ++school **"
    str = strings.Trim(str, " **++")
    fmt.Printf("str Trim is=|%v|\n", str)

    // 將字串左邊指定的字串去掉strings.TrimLeft("**aa bb ++", " **++") 去掉兩邊的 空格、**、++
    strLeft := "** ++Tom **go to ++school **"
    strLeft = strings.TrimLeft(strLeft, " **++")
    fmt.Printf("str TrimLeft is=|%v|\n", strLeft)

    // 將字串左邊指定的字串去掉strings.TrimRight("**aa bb ++", " **++") 去掉兩邊的 空格、**、++
    strRight := "** ++Tom **go to ++school **"
    strRight = strings.TrimRight(strRight, " **++")
    fmt.Printf("str TrimRight is=|%v|\n", strRight)

    // 判斷字串是否以指定的字串開頭 strings.HasPrefix("ftp://192.168.1.1","ftp") 返回true
    str = "ftp://192.168.1.1"
    fmt.Println("開頭是否含有", strings.HasPrefix(str, "ftp"))

    // 判斷字串是否以指定的字串結尾 strings.HasSuffix("abc123.jpg","abc")  返回false
    str = "abc123.jpg"
    fmt.Println("結尾是否含有", strings.HasSuffix(str, "jpg"))

}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章