Go标准库系列(一):字符串 strings

字符串比较

// 比较大小, 
// a > b 1
// a < b -1
// a = b 0
func Compare(a, b string) int
// 忽略大小写后是否相等
func EqualFold(s,t string) bool

是否存在某个字符或子串

// 子串substr 是否在s中
func Contains(s, substr string) bool
// chars 中任何一个 unicode 代码点在 s 中,返回true
func ContainsAny(s, chars string) bool
// unicode 代码点 r 在 s 中 返回 true
func ContainsRune(s string, r rune) bool


fmt.Println(strings.ContainsAny("failure","u & i")) // true
fmt.Println(strings.ContainsAny("","")) // false
fmt.Println(strings.ContainsAny("foo","")) // false

子串出现次数

// 子串出现的次数
func Count(s, sep string) int 

// 当sep为空时,Count的返回值是:utf8.RuneCountInString(s)+1
fmt.Println(strings.Count("谷歌中国","")) //5

字符串分割

// 用一个或者多个空格分割字符串s
func Fields(s string) []string
// 用满足f(s)为true的分割字符串
func FieldsFunc(s string, f func(rune) bool) []string
// 有无After的区别是有没有把sep去掉
func Split(s, sep string) []string 
func SplitAfter(s, sep string) []string
// N 通过最后一个参数n控制返回的结果中的slice中的元素个数,当n<0时,返回所有的子字符串;当n=0时,slice为nil;当n>0时,表示返回的slice中最多只有n个元素,其中最后一个元素不会分割。
func SplitN(s, sep string, n int) []string
func SplitAfterN(s, sep string, n int) []string

fmt.Printf("%q\n",strings.Split("foo,bar,baz",",") // ["foo" "bar" "baz"]

fmt.Printf("%q\n",strings.SplitAfter("foo,bar,baz",",") // ["foo," "bar," "baz"]

fmt.Printf("%q\n",strings.SplitAfterN("foo,bar,baz",","2) // ["foo," "bar,baz"]

字符串是否有某个前缀或后缀

// 前缀
func HasPrefix(s, prefix string) bool
//后缀
func HasSuffix(s, suffix string) bool 


fmt.Println(strings.HasPrefix("Gopher","Go")) // true
fmt.Println(strings.HasPrefix("Gopher","")) //true
fmt.Println(strings.HasSuffix("Gopher","")) //true

字符或子串在字符串中出现的位置

// 找不到,返回-1
// 第一次出现的位置 
func Index(s, sep string) bool
func IndexByte(s string, c byte) int 
func IndexAny(s, chars string) int //chars中任何一个Unicode代码点在s中首次出现的位置
func IndexFunc(s string,f func(rune) bool) int 
func IndexRune(s string,r rune) int 


// 最后一次出现的位置
func LastIndex(s, sep string) int
func LastIndexByte(s string, c byte) int
func LastIndexAny(s, chars string) int
func LastIndexFunc(s string, f func(rune) bool) int 

字符串JOIN操作

//用sep连接a字符串数组/切片
func Join(a []string, sep string) string

字符串替换

func Map(mapping func(rune)rune, s string) string
// Map函数,将s的每一个字符按照mapping的规则做映射替换,如果mapping的返回值<0,则舍弃该字符。
mapping := func(r rune) rune {
switch {
	case r >= 'A' && r <= 'Z': //大写转小写
		return r + 32
	case r >= 'a' && r <= 'z':
		return r
	case unicode.Is(unicode.Han,r): //汉子换行
		return '\n'
	}
	return -1 //过去掉其他字符
}
	

// 用new 替换old, 一共替换n次,如果n<0,全部替换
func Replace(s,old,new string,n int) string	
func ReplaceAll(s,old,new string) string //全部替换

大小写转换

// 大小写转换
func ToLower(s string) string
func ToUpper(s string) string

// 特殊字符的大小写转换
func ToLowerSpecial(c unicode.SpecialCase, s string) string
func ToUpperSpecial(c unicode.SpecialCase, s string) string


// 每个单词首字母转为大写
func Title(s string) string
func ToTitle(s string) string // 全部转为大写
func ToTitleSpical(c unicode.SpecialCase,s string) string //全部转为大写,包括处理特殊字符

修剪

// 将s的左右侧的匹配cutset中的任一字符的字符去掉
func Trim(s string, cutset string) string
func TrimLeft(s string,cutset string) string
func TrimRight(s string,cutset string) string

func TrimPrefix(s string,prefix string) string
func TrimSuffix(s string,suffix string) string

func TrimSpace(s string) string

func TrimFunc(s string, f func(rune) bool) string
func TrimLeftFunc(s string, f func(rune) bool) string
func TrimRightFunc(s string, f func(rune) bool) string

Replacer类型

// 不定参数old new 对,然后如果参数长度为奇数会导致panic
r := strings.NewReplacer("<","&;t;",">","&gt;",">") // r为Replacer的指针类型
// 替换
fmt.Println(r.Replace("this is <b>HTML</b>")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值