Go strings

Go 的 strings 包中包含许多处理字符串的函数

官方文档:https://golang.org/pkg/strings/

前缀、后缀

判断字符串前缀、后缀

// 判断字符串 s 是否以 prefix 开头
func HasPrefix(s, prefix string) bool // 判断字符串 s 是否以 suffix 结尾
func HasSuffix(s, suffix string) bool

查找子字符串

查找字符串中是否包含子字符串

// 查找字符串 s 中是否包含 substr
func Contains(s, substr string) bool // 查找字符串 s 中是否包含 chars 中任意字符
func ContainsAny(s, chars string) bool

查找字符串中子字符串的位置

// 查找字符串 s 中第一次出现 substr 的位置,如果不存在返回 -1
func Index(s, substr string) int // 查找字符串 s 中最后一次出现 substr 的位置,如果不存在返回 -1
func LastIndex(s, substr string) int // 查找字符串 s 中第一次出现 chars 中任意字符的位置,如果不存在返回 -1
func IndexAny(s, chars string) int // 查找字符串 s 中最后一次出现 chars 中任意字符的位置,如果不存在返回 -1
func LastIndexAny(s, chars string) int // 查找字符串 s 中第一次出现 c 字节的位置,如果不存在返回 -1
func IndexByte(s string, c byte) int

修剪

Trim 通过 Unicode 编码是否一致判断去除的片段,cutset 中包含的是要去除的字节,顺序不一致也会被删除

Trim 会连续去除,直至指定位置不存在该片段,但是 TrimPrefixTrimSuffix 只会去除一次,用于去除前、后缀

// 返回字符串 s 在前后分别去除 cutset 中包含字节的切片
func Trim(s string, cutset string) string // 返回字符串 s 在前后分别去除空格的切片
// 等于 func Trim(s string, “ ”) string
func TrimSpace(s string) string // 返回字符串 s 在开头去除 cutset 中包含字节的切片
func TrimLeft(s string, cutset string) string // 返回字符串 s 在结尾去除 cutset 中包含字节的切片
func TrimRight(s string, cutset string) string

示例:

package main

import (
"fmt"
"strings"
) func main() {
a := "hello world"
b := strings.TrimLeft(a, "lhed")
c := strings.TrimPrefix(a, "hel")
d := strings.Trim(a, "lhed")
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}

输出结果:

hello world
o world
lo world
o wor

分割

将一个字符串以指定分隔符进行分隔,返回一个切片

// 以一个或多个空格为分隔符,对字符串 s 进行分割,空字符串会被舍弃
func Fields(s string) []string // 以一个字符串为分隔符,对字符串 s 进行分割
// 如果分隔符为空,则将每个字符进行切割
func Split(s, sep string) []string // 在一个字符串 sep 之后对字符串 s 进行分割
// 如果字符串 sep 为空,则对每个字符进行切割
func SplitAfter(s, sep string) []string // 以一个字符串为分隔符,从第一个分隔符开始,将字符串 s 最多分割成 n 部分
// 当 n == 0 时,返回 nil;当 n == -1 时,相当于 `Split`
func SplitN(s, sep string, n int) []string // 和 `SplitAfter` 的区别相当于 `Split` 和 `SplitN`
func SplitAfterN(s, sep string, n int) []string

示例:

package main

import (
"fmt"
"strings"
) func main() {
a := " hello, world, !"
b := strings.Fields(a)
c := strings.Split(a, " ")
d := strings.Split(a, ",")
e := strings.SplitAfter(a, ",")
f := strings.SplitAfterN(a, ",", 2) fmt.Println(b, len(b))
fmt.Println(c, len(c))
fmt.Println(d, len(d))
fmt.Println(e, len(e))
fmt.Println(f, len(f))
}

输出结果:

[hello, world, !] 3
[ hello, world, !] 5
[ hello world !] 3
[ hello, world, !] 3
[ hello, world, !] 2

替换

替换会搜素字符串中所有符合条件的子字符串,之后将其替换为新字符串

// 将字符串 s 中包含的 old 字符串替换为 new 字符串,从最左边开始一共替换 n 次
// 如果 old 为空,则从字符串开头开始,字符串开头结尾和每个字符之间添加一个 new,一共添加 n 个
// 如果 n < 0 则替换次数没有限制,相当于 `ReplaceAll`
func Replace(s, old, new string, n int) string // 和 `Replace` 相似,没有限制
func ReplaceAll(s, old, new string) string

示例:

package main

import (
"fmt"
"strings"
) func main() {
a := " hello world "
b := strings.Replace(a, " ", ",", 1)
c := strings.Replace(a, "", ",", 3)
d := strings.Replace(a, " ", ",", -1)
e := strings.ReplaceAll(a, " ", ",") fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
}

输出结果:

,hello world
, ,h,ello world
,hello,world,
,hello,world,

计数

// 字符串 s 包含子字符串 substr 的数量
// 如果 substr 为空,则返回字符串长度 + 1(字符间隙的数量)
func Count(s, substr string) int

重复

// 将字符串 s 重复 count 次,拼接成一个字符串
// count < 0 时会 panic
func Repeat(s string, count int) string

大小写转换

// 将字符串内所有字母转换成小写
func ToLower(s string) string // 将字符串中所有字母转换成大写
func ToUpper(s string) string // 每个单词的第一个字母转换为标题大小写
func Title(s string) string // 将字符串内所有字母转换为标题大小写
func ToTitle(s string) string

拼接

拼接是切割的反操作

// 以 sep 为分隔符,将 a 中元素拼接起来
func Join(a []string, sep string) string

Go package: strings的更多相关文章

  1. golang程序编译时提示“package runtime: unrecognized import path "runtime" (import path does not begin with hostname)”

    在编译golang的工程时提示错误的, 提示的错误信息如下: package bytes: unrecognized import path "bytes" (import pat ...

  2. JAVA中的字符串小结

    String字符串是只读的,不可变的 查看String类的源码,可以发现String类是被final关键字修饰的: 另外还可以看下String类源码中的其它方法实现,随便举个可以修改String值的方 ...

  3. The Go Programming Language. Notes.

    Contents Tutorial Hello, World Command-Line Arguments Finding Duplicate Lines A Web Server Loose End ...

  4. Java的String和StringBuilder

    一.String 1.创建String对象的方法: String s1="haha"; String s2=new String(); String s3=new String(& ...

  5. go语言标准库 时刻更新

    Packages   Standard library Other packages Sub-repositories Community Standard library ▾ Name Synops ...

  6. java 扫描输入

    到目前为止,从文件或标准输入读取数据还是一件相当痛苦第事情,一般第解决之道就是读入一行文本,对其进行分词,然后使用Integer Double 等类第各种解析方法来解析数据: //: strings/ ...

  7. java 格式化

    一. 可以之际像c语言一样用System.out.printf()格式化输出 二. System.out.format 1. format()方法模仿自printf(), 可用于PrintStream ...

  8. java jvm 字节码 实例

    https://blog.csdn.net/wuzhiwei549/article/details/80626677 代码 package strings; //: strings/WhitherSt ...

  9. 08 Packages 包

    Packages   Standard library Other packages Sub-repositories Community Standard library Name Synopsis ...

随机推荐

  1. 遇见手绘花卉小清新简约通用PPT模板推荐

    模版来源:http://ppt.dede58.com/jiaoxuekejian/26484.html

  2. vue-better-scroll实现移动端下拉加载组件

    1.下载安装better-scroll npm i -S better-scroll 1.1安装完成之后,打开pacaage.json文件查看,是否有(better-scroll) "dep ...

  3. ES6- Class类的使用,声明,继承

    声明一个类 //class 类 class Coder{ // 类中都是方法 函数 //val是name方法的参数 name(val){ console.log(val) //类 return val ...

  4. 利用 uDig 生成 GeoServer 可用的 SLD 渲染文件

    利用 uDig 生成 GeoServer 可用的 SLD 渲染文件 uDig简介 uDig是一个 open source (EPL and BSD) 桌面应用程序框架,构建在Eclipse RCP和G ...

  5. Java内存分析工具MAT

    MAT是一个强大的内存分析工具,可以快捷.有效地帮助我们找到内存泄露,减少内存消耗分析工具.内存中堆的使用情况是应用性能监测的重点,而对于堆的快照,可以dump出来进一步分析,总的来说,一般我们对于堆 ...

  6. RTX5的汽车级,工业级,医疗和铁路安全认证已经通过,证书已颁发

    说明: 1.当前RTX5的教程已经在制作中,使用CMSIS-RTOS V2封装层,含FreeRTOS,配套V7,V6和V5板子​. 2.我们各种开发板和模块的资料汇总贴,搞了个cnblogs,临时先用 ...

  7. Java描述设计模式(08):桥接模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥 ...

  8. SpringBoot2.0 整合 Redis集群 ,实现消息队列场景

    本文源码:GitHub·点这里 || GitEE·点这里 一.Redis集群简介 1.RedisCluster概念 Redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的 ...

  9. ASP.NET Core 2.2 WebApi 系列【二】使用EF CodeFirst创建数据库

    Code First模式 Code First是指"代码优先"或"代码先行". Code First模式将会基于编写的类和配置,自动创建模型和数据库. 一.准备 ...

  10. Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...