一、len(str)返回字符串、数组长度
package main
import (
"fmt"
)
func main() {
str := "NANJING南京"//golang编码统一为utf-8(ascii的字符(字母和数字)占一个字节),汉字占3个
fmt.Println("str的长度是", len(str))
}
输出
PS D:\GO\goproject\chaptor6\stringfun> go run .\main.go
str的长度是 13
二、字符串遍历,同时处理有中文的问题
a := []rune(str)切片转换
package main
import (
"fmt"
)
func main() {
//str := "NANJING南京"//golang编码统一为utf-8(ascii的字符(字母和数字)占一个字节),汉字占3个
//fmt.Println("str的长度是", len(str))
str2 := "hello南京"
//使用切片
r :=[]rune(str2)
for i := 0; i < len(r); i++ {
fmt.Printf("字符=%c\n", r[i])
}
}
输出
PS D:\GO\goproject\chaptor6\stringfun> go run .\main.go
字符=h
字符=e
字符=l
字符=l
字符=o
字符=南
字符=京
三、字符串转整数、整数转字符串
1、字符串转整数n, err := strconv.Atoi(“hello”)
package main
import (
"fmt"
"strconv"
)
func main() {
//字符串转整数:n,err := strconv.Atoi("12")
n, err := strconv.Atoi("123")
if err != nil {
fmt.Println("转换错误", err)
}else{
fmt.Println("转成结果是", n)
}
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo1> go run .\main.go
转成结果是 123
如果无法转成整数:
package main
import (
"fmt"
"strconv"
)
func main() {
//字符串转整数:n,err := strconv.Atoi("12")
n, err := strconv.Atoi("hello")
if err != nil {
fmt.Println("转换错误", err)
}else{
fmt.Println("转成结果是", n)
}
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo1> go run .\main.go
转换错误 strconv.Atoi: parsing "hello": invalid syntax
2、整数转字符串str = strconv.Itoa(2345)
package main
import (
"fmt"
"strconv"
)
func main() {
a := 23455
str1 := strconv.Itoa(a)
fmt.Printf("a的字符串值是%v, 类型是%T", str1, str1)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo2> go run .\mian.go
a的字符串值是23455, 类型是string
四、字符串互转byte
1、字符串转byte,[]byte(“hello go”)输出ascii码
package main
import (
"fmt"
)
func main() {
var bytes = []byte("hello go")
fmt.Printf("bytes=%v\n", bytes)
//输出对应ascii码
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
bytes=[104 101 108 108 111 32 103 111]
2、byte转字符串,string([]byte{97, 98, 99})
package main
import (
"fmt"
)
func main() {
str := string([]byte{97, 98, 99})
fmt.Printf("str的值是%v str的类型是%T", str, str)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
str的值是abc str的类型是string
五、查找子串是否在指定的字符串中,返回bool值,strings.Contains(“seafood”, “foo”)
package main
import (
“fmt”
“strings”
)
func main() {
//var bytes = []byte(“hello go”)
//fmt.Printf(“bytes=%v\n”, bytes)//输出对应ascii码
//str := string([]byte{97, 98, 99})
//fmt.Printf("str的值是%v str的类型是%T", str, str)
b :=strings.Contains("seafoods", "foo")
fmt.Printf("b=%v, b的类型%T\n", b, b)
c :=strings.Contains("seafoods", "fool")
fmt.Printf("c=%v, c的类型%T\n", c, c)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
b=true, b的类型bool
c=false, c的类型bool
六、统计一个字符串中有几个指定的子串,strings.count(“select”, “e”) //2
七、不区分字母大小写的字符串比较(==区分字母大小写),返回bool,strings.EqualFold(“abc”,“AbC”)
package main
import (
"fmt"
"strings"
)
func main() {
d := strings.EqualFold("abc", "AbC")
fmt.Printf("d=%v, d的类型%T\n", d, d)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
d=true, d的类型bool
八、返回子串在字符串中第一次出现的index值,如果没有返回-1,strings.Index(“NLT_abc”, “abc”)//4
package main
import (
"fmt"
"strings"
)
func main() {
e := strings.Index("NLT_abc", "abc")
fmt.Printf("e=%v, e的类型%T\n", e, e)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
e=4, e的类型int
没有该值
package main
import (
"fmt"
"strings"
)
func main() {
e := strings.Index("NLT_abc", "ABC")
fmt.Printf("e=%v, e的类型%T\n", e, e)
}
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
e=-1, e的类型int
九、返回子串在字符串中最后一次出现的index值,如果没有返回-1,strings.LastIndex(“go golang”, “go”)//3
十、将指定子串替换成另一个子串:strings.Replace(“go go hello”, “go”, “go语言”, n) ,n指定需要替换几个,如果n=-1,表示全部替换
package main
import (
"fmt"
"strings"
)
func main() {
str2 := "go go hello"
f := strings.Replace(str2, "go", "go语言", -1)
//只做替换,不改变原来的值
fmt.Printf("f=%v, f的类型%T\n", f, f)
fmt.Printf("str2=%v, str2的类型%T\n", str2, str2)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
f=go语言 go语言 hello, f的类型string
str2=go go hello, str2的类型string
十一、按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组,strings.Split(“hello,world,go”, “,”)
package main
import (
"fmt"
"strings"
)
func main() {
strArr := strings.Split("hello,world,go", ",")
for i := 0; i < len(strArr); i++ {
fmt.Printf("i=%v\n", strArr[i])
}
fmt.Printf("strArr=%v, strArr的类型%T", strArr, strArr)
}
输出
PS D:\GO\goproject\chaptor6\stringfun\demo3> go run .\main.go
i=hello
i=world
i=go
strArr=[hello world go], strArr的类型[]string
十二、将字符串的字母进行大小写转换,strings.ToLower(“Go”)//go, strings.ToUpper(“Go”)//GO
package main
import (
"fmt"
"strings"
)
func main() {
str := "Golang Hello"
str1 := strings.ToLower(str)
str2 := strings.ToUpper(str)
fmt.Printf("str1=%v\n", str1)
fmt.Printf("str2=%v\n", str2)
fmt.Printf("str=%v\n", str)
}
输出
PS D:\goproject\src\go_code\chaptor6hanshu\demo1> go run .\main.go
str1=golang hello
str2=GOLANG HELLO
str=Golang Hello
十三、将字符串左右空格去除、出去两边指定字符、去除左边指定字符、去除右边指定字符
package main
import (
"fmt"
"strings"
)
func main() {
str1 := strings.TrimSpace(" An apple ")
fmt.Printf("str1=%q\n", str1)
str2 := strings.Trim("!hello!!", "!")//左右两边一个或连在一起的多个都会去除
fmt.Printf("str2=%q\n", str2)
str3 := strings.TrimLeft("!hello!!", "!")
fmt.Printf("str3=%q\n", str3)
str4 := strings.TrimRight("!hello!!", "!")
fmt.Printf("str4=%q\n", str4)
}
输出
PS D:\goproject\src\go_code\chaptor6hanshu\demo1> go run .\main.go
str1="An apple"
str2="hello"
str3="hello!!"
str4="!hello"