Go-字符串操作包

strings包

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Println(strings.Compare("1", "2"))                       // 比较大小
	fmt.Println(strings.Contains("abc", "bd"))                   //是否包含
	fmt.Println(strings.Count("abcabdabd", "bd"))                //计算出现次数
	fmt.Printf("%q\n", strings.Fields("abc abc\t123\n1\r1"))     //空白字符分割
	fmt.Println(strings.HasPrefix("abcd", "ab"))                 //以什么开头
	fmt.Println(strings.HasSuffix("abcd", "ab"))                 //以什么结尾
	fmt.Println(strings.Join([]string{"1", "2"}, "-"))           //字符串连接,可以指定连接字符
	fmt.Println(strings.Repeat("*", 20))                         //20个*
	fmt.Println(strings.Replace("abcabcabcdabc", "abc", "x", 2)) //替换,(src, 需要替换的内容, 替换成的内容, 替换次数)
	fmt.Println(strings.ReplaceAll("abcabcabcdabc", "abc", "x")) //全部替换
	fmt.Printf("%q\n", strings.Split("a-b--c", "-"))             //以什么做分割符
	fmt.Printf("%q\n", strings.SplitAfter("a-b-c", "-"))         //分割符也保留
	fmt.Printf("%q\n", strings.SplitN("a-b-c", "-", 2))          //分割限定次数
	fmt.Println(strings.Title("a b bab abc"))                    //首字母大写
	fmt.Println(strings.ToLower("A B bab abc"))                  //全部小写
	fmt.Println(strings.ToUpper("A B bab abc"))                  //全部大写
	fmt.Println(strings.Trim("abcbcdabcdbcabc", "abc"))          //去除前后字符a,b,c
	fmt.Println(strings.TrimLeft("abcbcdabcdbcabc", "abc"))      //左边去掉a,b,c
	fmt.Println(strings.TrimRight("abcbcdabcdbcabc", "abc"))     //右边去掉a,b,c
	fmt.Println(strings.TrimSpace(" abcbcdabcdbcabc \n\r   "))   //去除前后空白字符
	fmt.Println(strings.TrimSuffix("abcbcdabcdbcabc", "abc"))    //后边的去掉abc
	fmt.Println(strings.TrimPrefix("abcbcdabcdbcabc", "abc"))    //前面去掉abc
}

FieldsFunc

func FieldsFunc(s string, f func(rune) bool) []string

FieldsFunc splits the string s at each run of Unicode code points c satisfying f(c) and returns an array of slices of s. If all code points in s satisfy f(c) or the string is empty, an empty slice is returned.

FieldsFunc在每次运行Unicode代码时将字符串s分割为满足f(c)的c,并返回一个s的片数组。如果s中的所有代码点都满足f(c)或者字符串为空,则返回一个空片

func aFields(split rune) bool {
	return split == 'a'
}

func main() {
	fmt.Printf("%q\n", strings.FieldsFunc("aaabsad", aFields)) //["bs" "d"]
}

unicode/utf8包

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	var name string = "qq"
	var desc string = "i love china"
	var txt = "我爱中国"

	fmt.Println(utf8.RuneCountInString(txt))  //中文字符数量
	fmt.Println(utf8.RuneCountInString(desc)) //unicode数量

	// 字符串 => []byte
	fmt.Println([]byte(desc))         //转化成byte切片
	fmt.Println(string([]byte(desc))) //转化成字符串
	fmt.Println([]byte(txt))          //转化成byte切片
	fmt.Println(string([]byte(txt)))  //转化成字符串

	// 字符串 => []rune
	fmt.Println([]rune(desc))         //转化成rune切片
	fmt.Println(string([]rune(desc))) //转化成字符串
	fmt.Println([]rune(txt))          //转化成rune切片
	fmt.Println(string([]rune(txt)))  //转化成字符串
}

strconv包

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 字符串 <=> int
	i, err := strconv.Atoi("abc")
	fmt.Println(i, err) // 不是数字,会出错
	i, err = strconv.Atoi("-15")
	fmt.Println(i, err)
	fmt.Printf("%q\n", strconv.Itoa(45)) //int转化字符串

	// 字符串 <=> bool
	//strconv.FormatBool bool转化成字符串
	fmt.Printf("%q\n", strconv.FormatBool(true))
	fmt.Printf("%q\n", strconv.FormatBool(false))
	//strconv.ParseBool	字符串转化成bool
	fmt.Println(strconv.ParseBool("true"))
	fmt.Println(strconv.ParseBool("false"))
	fmt.Println(strconv.ParseBool("1"))
	fmt.Println(strconv.ParseBool("0"))
	fmt.Println(strconv.ParseBool("xxx")) //无法转化
	// 字符串 <=> float
	fmt.Println(strconv.FormatFloat(1.68, 'E', -1, 32)) //科学计算法,-1表示精度
	fmt.Println(strconv.FormatFloat(1.68, 'f', -1, 32)) //十进制
	fmt.Println(strconv.ParseFloat("1.34", 32))         //32位
	fmt.Println(strconv.ParseFloat("1.34", 64))         //64位

}

posted @ 2020-10-04 13:20  rxg456  阅读(84)  评论(0)    收藏  举报