一、字符串支持的转义字符

\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\' 单引号
\" 双引号
\\ 反斜杠
\uXXXX Unicode字符码值转义,例如 "\u5eb7" 就是 "康"

​ Go语言中字符串的顶层结构是由一个指针和长度构成的。使用 unsafe.Sizeof("") 会得到16长度,其中8个字节是指针,指向字符串的内存地址,8个是存储字符串的长度。

二、字符串反转

func reverse(str string) string{
var result string
strLen := len(str)
for i :=0; i < strLen; i++{
result = result + fmt.Sprintf("%c", str[strLen-i-1])
}
return result
} func reverse(str string) string{
var result []byte
tmp := []byte(str)
length := len(str)
for i := 0; i < length; i++{
result = append(tmp[length-i-1])
}
return result
}

三、字符串操作

1. 索引访问

​ 可以使用[index]方式,访问到字符串中的字符。可以访问,不可以修改。

s := "Hank"
fmt.Printf("%c", s[2])
// 返回 n

2. unicode/utf8 包

​ 多字节字符的处理,请参考 unicode/utf8 包的相关说明。

`import` `"unicode/utf8"``utf8.RuneCountInString(``"小韩说课"``)``//` `返回 4`

3. len(),字符串占用的字节数

​ utf-8 是变长字符集,英文标点占用1个字节,中文占用3个字节。

len("Hank康")
// 返回 7

4. +,字符串连接"

"Hello" + " " + "Hank"

5. ==, >, <

​ 字符串比较,比较机制是字符的对称比较。

"abc" > "bbcd"
// 结果为false

6. strings.Compare(a, b string) int

​ 字符串比较,比较机制是字符的对称比较。返回值为:

0,表示a == b
-1,表示a < b
1,表示a > b
strings.Compare("abc", "abcd")
// 返回 1

7. strings.Contains(s, substr string) bool

​ 检测字符串 substr 是否在 s 中

strings.Contains("foobar", "foo")
// 返回 true
strings.Contains("fobar", "foo")
// 返回 false

8. strings.ContainsAny(s, chars string) bool

​ 检测字符串 chars 的中任意字符是否出现在 s 中。

fmt.Println(strings.ContainsAny("Hank", "kang"))
// 返回 true
fmt.Println(strings.ContainsAny("Hank", "go"))
// 返回 false

9. strings.ContainsRune(s string, r rune) bool

​ 检测 rune字符是否出现在 s 中。

strings.ContainsRune("Hank", 'a')
// 返回 true
strings.ContainsRune("Hank", 97)
// 返回 true,a的码值97

10. strings.Count(s, substr string) int

​ 统计字符串 s 中非重叠substr的数量。若统计空字符串"",会返回 s 的长度加1

strings.Count("HanZhongKang", "n")
// 返回 3
strings.Count("Hank", "")
// 返回 5,"Hank"每个rune的前后都算

11. strings.EqualFold(s, t string) bool

​ 检测字符串 s 和 t 在忽略大小写的情况下是否相等。

strings.EqualFold("Hank", "hank")
// 返回 true

12. strings.Fields(s string) []string

​ 返回使用空格分割的字符串 s,结果为切片

strings.Fields("Han Zhong Kang")
// 返回 []string, ["Han", "Zhong", "Kang"]

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

​ 使用函数确定分隔符,来分割字符串 s。结果是切片。

// ,|/ 都是分隔符
fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.FieldsFunc("go,python,c++/c,Js|JavaScript", fn)
// 返回 ["go" "python" "c++" "c" "Js" "JavaScript"]

14. strings.HasPrefix(s, prefix string) bool

​ 检测字符串 s 是否以字符串 prefix 作为前缀

strings.HasPrefix("Gopher", "Go")
// 返回 true

15. strings.HasSuffix(s, suffix string) bool

​ 检测字符串 s 是否以字符串 suffix 作为后缀。

strings.HasSuffix("Gopher", "er")
// 返回 true

16. strings.Index(s, substr string) int

​ 返回字符串 substr 在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。

strings.Index("Gopher", "ph")
// 返回 2

17. strings.IndexAny(s, chars string) int

​ 返回字符串 chars 中的任意字符在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。

strings.IndexAny("Gopher", "lmno")
// 返回 1

18. strings.IndexByte(s string, c byte) int

​ 返回byte字符 c 在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。

strings.IndexByte("Gopher", 'h')
// 返回 3

19. strings.IndexFunc(s string, f func(rune) bool) int

​ 返回字符串 s 中第一次满足函数 f 的rune字符的索引位置,若没有出现,返回-1。

fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.IndexFunc("go,python,c++/c,Js|JavaScript", fn)
// 返回 2

20. strings.IndexRune(s string, r rune) int

​ 返回run字符 r 在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。

strings.IndexRune("小韩说课", '说')
// 返回 6

21. strings.Join(a []string, sep string) string

​ 使用分隔符 sep 连接字符串切片 a。

ss := []string{"Go", "Hank", "Python", "PHP"}
strings.Join(ss, "-")
// 返回 "Go-Hank-Python-PHP"

22. strings.LastIndex(s, substr string) int

​ 返回字符串 substr 在字符串 s 中最后一次出现的索引位置,若没有出现,返回-1。

strings.LastIndex("Hankang", "an")
// 返回 4

23. strings.LastIndexAny(s, chars string) int

​ 返回字符串 chars 中的任意字符在字符串 s 中最后一次出现的索引位置,若没有出现,返回-1。

strings.LastIndexAny("Hankang", "lmno")
// 返回 5

24. strings.LastIndexByte(s string, c byte) int

​ 返回byte字符 c 在字符串 s 中最后一次出现的索引位置,若没有出现,返回-1。

strings.LastIndexByte("Hankang", 'n')
// 返回 5

25. strings.LastIndexFunc(s string, f func(rune) bool) int

​ 返回字符串 s 中字后一次满足函数 f 的rune字符的索引位置,若没有出现,返回-1。

fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.LastIndexFunc("go,Js|JavaScript", fn)
// 返回 5

26. strings.Map(mapping func(rune) rune, s string) string

​ 返回字符串 s 中的每个字符经过映射函数 mapping 处理之后的字符串。

fn := func(c rune) rune {
if strings.ContainsRune(",|/", c) {
return '-'
} else {
return c
}
}
strings.Map(fn, "go,Js|JavaScript")
// 返回 "go-Js-JavaScript"

27. strings.Repeat(s string, count int) string

​ 返回将字符串 s 重复 count 的字符串。

strings.Repeat("la~", 3)
// 返回值 "la~la~la~"

28. strings.Replace(s, old, new string, n int) string

​ 在字符串 s 中使用字符串 new 替换字符串 old,使用 n 限定替换次数,n设置为负数表示没有限制。返回替换结果

strings.Replace("han zhong kang", "n", "N", 2)
// 返回 "haN zhoNg kang"

29. strings.Split(s, sep string) []string

​ 使用分隔符 sep 分割字符串 s,返回字符串切片

strings.Split("go-Js-JavaScript", "-")
// 返回 ["go", "Js", "JavaScript"]

30. strings.SplitAfter(s, sep string) []string

​ 在分隔符 sep 后分割字符串 s,返回字符串切片

strings.SplitAfter("go-Js-JavaScript", "-")
// 返回 ["go-", "Js-", "JavaScript"]
1. strings.SplitAfterN(s, sep string, n int) []string
在分隔符 sep 后分割字符串 s,使用 n 限定分割的元素数量,n<0全部子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。 strings.SplitAfterN("go-Js-JavaScript", "-", 2)
// 返回 ["go-", "Js-JavaScript"] 2. strings.SplitN(s, sep string, n int) []string
在分隔符 sep 分割字符串 s,使用 n 限定分割的元素数量,n<0全部子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。 strings.SplitN("go-Js-JavaScript", "-", 2)
// 返回 ["go", "Js-JavaScript"] 3. strings.Title(s string) string
返回Title化的字符串。 strings.Title("hello Hank's go")
// 返回 "Hello Hank's Go" 4. strings.ToLower(s string) string
转换字符串 s 到小写。 strings.ToLower("Hank's Go Guide")
// 返回 "hank's go guide" 5. strings.ToLowerSpecial(c unicode.SpecialCase, s string) string
使用特定的规则转换字符串 s 到小写。 strings.ToLowerSpecial(unicode.TurkishCase, "Önnek İş")
// 返回 önnek iş 6. strings.ToTitle(s string) string
返回全部字符都Title化的字符串。 strings.Title("hello Hank's go")
// 返回 "HELLO HANK'S GO" 7. strings.ToTitleSpecial(c unicode.SpecialCase, s string) string
使用特定的规则将全部字符都Title化。 strings.ToTitleSpecial(unicode.TurkishCase, "dünyanın ilk borsa yapısı Aizonai kabul edilir")
// 返回 "DÜNYANIN İLK BORSA YAPISI AİZONAİ KABUL EDİLİR" 8. strings.ToUpper(s string) string
将字符串 s 中所有字符转换为大写。 strings.ToUpper("hello Hank's go")
// 返回 "HELLO HANK'S GO" 9. strings.ToUpperSpecial(c unicode.SpecialCase, s string) string
使用特定的规则将字符串 s 中所有字符转换为大写。 strings.ToUpperSpecial(unicode.TurkishCase, "örnek iş")
// 返回 "ÖRNEK İŞ" 10. strings.Trim(s string, cutset string) string
截取字符串 s 两端包裹的特定字符集 cutset。 strings.Trim(" user name ", " ")
// 返回 "user name" 11. strings.TrimFunc(s string, f func(rune) bool) string
截取字符串 s 两端满足函数 f 的字符。 fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.TrimFunc("|/user name,/", fn)
// 返回 "user name" 12. strings.TrimLeft(s string, cutset string) string
截取字符串 s 左边包裹的特定字符集 cutset。 strings.TrimLeft(" user name ", " ")
// 返回 "user name " 13. strings.TrimLeftFunc(s string, f func(rune) bool) string
截取字符串 s 左边满足函数 f 的字符。 fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.TrimLeftFunc("|/user name,/", fn)
// 返回 "user name,/" 14. strings.TrimPrefix(s, prefix string) string
截取字符串 s 的前缀 prefix。 strings.TrimPrefix("hank_goGuide", "hank_")
// 返回 "goGuide" 15. strings.TrimRight(s string, cutset string) string
截取字符串 s 右边包裹的特定字符集 cutset。 strings.TrimRight(" user name ", " ")
// 返回 " user name" 16. strings.TrimRightFunc(s string, f func(rune) bool) string
截取字符串 s 右边满足函数 f 的字符。 fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.TrimRightFunc("|/user name,/", fn)
// 返回 "|/user name" 17. strings.TrimSpace(s string) string
截取字符串 s 两端的空白字符。 strings.TrimSpace(" \t\n Hello, Gophers \n\t\r\n")
// 返回 "Hello, Gophers" 18. strings.TrimSuffix(s, suffix string) string
截取字符串 s 的后缀 suffix。 strings.TrimSuffix("goGuide_beta", "_beta")
// 返回 "goGuide"

最新文章

  1. shell循环
  2. [New Portal]Windows Azure Virtual Machine (13) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (3)
  3. 关于PHP位运算的简单权限设计
  4. Could not find artifact com.sun:tools:jar:1.5.0
  5. lintcode: 二叉树的锯齿形层次遍历
  6. Tkinter教程之Radiobutton篇
  7. SQL Server 添加一条数据获取自动增长列的几种方法
  8. CxImage整理(叠加字符/图像合并)
  9. libvirt(virsh命令介绍)
  10. 通过spring 中的@Scheduled来执行定时任务
  11. 2017上半年技术文章集合【Android】—184篇文章分类汇总
  12. 从Myeclipse到Intelj Idea
  13. dev gridControl 自定义绘制列头颜色
  14. AtCoder Beginner Contest 122 D - We Like AGC(DP)
  15. 《大型网站系统与Java中间件实现》有感
  16. 【转】MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
  17. OpenModelica中simulate的用法
  18. Add task bar to ubuntu
  19. python tuple排序
  20. 实现asp.net的文件压缩、解压、下载

热门文章

  1. 微信小程序根据生日获取年龄
  2. go语言设计模式之adapter
  3. AtCoder Beginner Contest 140
  4. 图解JVM垃圾内存回收算法
  5. 从Python安装到语法基础,这才是初学者都能懂的爬虫教程
  6. linux 主机通过虚拟机(win10)上网
  7. 【Linux命令】系统状态检测命令8个(ifconfig、uname、uptime、free、who、last、history、sosreport)
  8. UTF-8和BOM的一些说明
  9. Kettle-动态数据链接,使JOB得以复用
  10. Windows Store无法联网时安装WSL