Go基础-字符串函数

作为一个开发者,对于字符串的处理一般都很常用,整理一下,希望能帮到一些同学

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 协议》,转载必须注明作者和本文链接
讨论数量: 1
╰ゝSakura

mark

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!