Golang 字符串操作小结
Apr 29, 2016
本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.
本文形式为, 给出一个函数接口, 然后匹配相关example. 关注函数主要集中在
strings和strconv
字符串比较
函数接口
1 | // Compare比较字符串的速度比字符串内建的比较要快 |
1 | fmt.Println(strings.Compare(string("hello"), string("haha"))) // 1 |
字符串查找
字符串查找的相关接口
1 | // 判断给定字符串s中是否包含子串substr, 找到返回true, 找不到返回false |
1 | fmt.Println(strings.Contains("seafood", "foo")) // true |
字符串重复
1 | // 重复s字符串count次, 最后返回新生成的重复的字符串 |
1 | fmt.Println("ba" + strings.Repeat("na", 2)) // banana |
字符串替换
1 | // 在s字符串中, 把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换 |
1 | fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // oinky oinky oink |
字符串删除
1 | // 删除在s字符串的头部和尾部中由cutset指定的字符, 并返回删除后的字符串 |
1 | // 删除首部和尾部的 ! 和空格 |
字符串大小写转换
1 | // 给定字符串转换为英文标题的首字母大写的格式(不能正确处理unicode标点) |
1 | fmt.Println(strings.Title("her royal highness")) // Her Royal Highness |
字符串前缀后缀
前缀和后缀的判断均为大小写敏感
1 | // 判断字符串是否包含前缀prefix |
1 | fmt.Println(strings.HasPrefix("Gopher", "Go")) // true |
字符串分割
函数接口
1 | // 把字符串按照sep进行分割, 返回slice(类似于python中的split) |
使用example
1 | func main() { |
字符串拼接
三种拼接方案:
- 直接用
+=操作符, 直接将多个字符串拼接. 最直观的方法, 不过当数据量非常大时用这种拼接访求是非常低效的. 用字符串切片([]string)装载所有要拼接的字符串,最后使用strings.Join()函数一次性将所有字符串拼接起来。在数据量非常大时,这种方法的效率也还可以的。- 利用Buffer(
Buffer是一个实现了读写方法的可变大小的字节缓冲),将所有的字符串都写入到一个Buffer变量中,最后再统一输出.
函数接口
1 | // bytes.Buffer的方法, 将给定字符串追加(append)到Buffer |
三种字符串拼接方式的性能测试(出自参考链接的文章)
1 | package main |
运行结果如下
1 | taked time is 0.004145088 |
字符串转换
字符串转化的函数在strconv中
Append*函数表示将给定的类型(如bool, int等)转换为字符串后, 添加在现有的字节数组中[]byteFormat*函数将给定的类型变量转换为string返回Parse*函数将字符串转换为其他类型
1 | // 字符串转整数 |
1 | str := make([]byte, 0, 100) |