目录
1,字节数组
示例:
package main
import "fmt"
func main() {
var (
str1 = "hello"
str2 = "world"
)
result := str1 + " " + str2
fmt.Printf("数据:%s,长度为:%d,数据类型是:%T\n", result, len(result), result)
//转换成字节数组
tmp := []byte(result)
fmt.Printf("tmp数据:%s,长度为:%d,数据类型是:%T\n", tmp, len(tmp), tmp)
for i := 0; i < len(tmp); i++ {
fmt.Println(tmp[i]) //输出ascii码
fmt.Println(string(tmp[i])) //字节数组转化成字符串类型
}
fmt.Println(string(tmp)) //字节数组转化成字符串类型
}
[Running] go run "f:\goProject\src\dev_code\day15\example1\main\main.go"
数据:hello world,长度为:11,数据类型是:string
tmp数据:hello world,长度为:11,数据类型是:[]uint8
104
h
101
e
108
l
108
l
111
o
32
119
w
111
o
114
r
108
l
100
d
hello world
[Done] exited with code=0 in 0.539 seconds
反转
package main
import "fmt"
func main() {
var (
str1 = "hello"
str2 = "world"
)
result := str1 + " " + str2
fmt.Printf("数据:%s,长度为:%d,数据类型是:%T\n", result, len(result), result)
//转换成字节数组
tmp := []byte(result)
fmt.Printf("tmp数据:%s,长度为:%d,数据类型是:%T\n", tmp, len(tmp), tmp)
for i := 0; i < len(tmp); i++ {
// fmt.Println(tmp[i]) //输出ascii码
fmt.Println(string(tmp[i])) //字节数组转化成字符串类型
}
fmt.Println("反转", REvers(result))
// fmt.Println(string(tmp)) //字节数组转化成字符串类型
}
func REvers(str string) string {
var (
result string //定义一个空的字符串
leng int = len(str)
)
for i := 0; i < leng; i++ {
//sprintf转换数据类型为string,使用+进行拼接
result = result + fmt.Sprintf("%c", str[leng-i-1])
}
return result
}
[Running] go run "f:\goProject\src\dev_code\day15\example1\main\main.go"
数据:hello world,长度为:11,数据类型是:string
tmp数据:hello world,长度为:11,数据类型是:[]uint8
h
e
l
l
o
w
o
r
l
d
反转 dlrow olleh
2,头尾处理
示例:判断字符串s是否以prefix开头,判断URL是否以"htp://"为开头, 如果不是,则加上http://". 判断字符串s是否以suffix结尾,判断路径是否以"/"为结尾,如果不是,则加上"/"为结尾。用到的函数
strings.HasPrefix和strings.HasSuffix
package main
import (
"fmt"
"strings"
)
func main() {
var (
url string
path string
)
//输入两个变量
fmt.Scanf("%s%s", &url, &path)
fmt.Println(URLprocess(url))
fmt.Println(PATHprocess(path))
}
//头部判断是否包含http://,如果不包含则加上http://
func URLprocess(url string) string {
//返回的result类型是bool
result := strings.HasPrefix(url, "http://") //使用函数判断开头是否有http://
if !result { //不包含就执行
url = fmt.Sprintf("http://%s", url)
}
return url
}
//判断尾部是否包含“/”,不包含就添加“/”
func PATHprocess(path string) string {
//返回的result类型是bool
result := strings.HasSuffix(path, "/") //使用函数判断结尾是否有/
if !result { //不包含就执行
path = fmt.Sprintf("%s/", path)
}
return path
}
PS F:\goProject\src\dev_code\day15\example2\main> go run .\main.go
www.yingxiang.com /bin/bash
http://www.yingxiang.com //结果在前面添加http://
/bin/bash/ //结果在后面添加/
3,位置索引
示例:判断子字符串在字符串中首次出现的位置和末尾出现的位置。用到的函数strings.Index和strings.Lastindex
package main
import (
"fmt"
"strings"
)
//判断关键字在字符串中出现的索引位置
func main() {
var (
s string = "aabbccddaccd"
str string = "cd"
)
start := strings.Index(s, str)
fmt.Println("关键字首次出现的位置:", start)
end := strings.LastIndex(s, str)
fmt.Println("关键字尾部出现的位置:", end)
}
[Running] go run "f:\goProject\src\dev_code\day15\example3\main\main.go"
关键字首次出现的位置: 5
关键字尾部出现的位置: 10
[Done] exited with code=0 in 0.558 seconds
4,替换
用到的函数是strings.Replace。替换Replace(源字符串,原字段,新字段,替换次数)
示例:
package main
import (
"fmt"
"strings"
)
//判断关键字在字符串中出现的索引位置
func main() {
var (
s string = "aabbccddaccdbbcd"
str string = "cd"
)
//替换Replace(源字符串,原字段,新字段,替换次数)
//-1表示圈字符串替换
result := strings.Replace(s, str, "CD", -1)
fmt.Println("替换字符串操作", result)
//数字代表替换的次数
result1 := strings.Replace(s, str, "CD", 1)
fmt.Println("替换字符串操作", result1)
//0表示不替换
result2 := strings.Replace(s, str, "CD", 0)
fmt.Println("替换字符串操作", result2)
}
[Running] go run "f:\goProject\src\dev_code\day15\example3\main\main.go"
替换字符串操作 aabbcCDdacCDbbCD
替换字符串操作 aabbcCDdaccdbbcd
替换字符串操作 aabbccddaccdbbcd
[Done] exited with code=0 in 0.54 seconds
5,统计次数
使用strings.count函数统计关键字出现在字符串中的次数
示例:
package main
import (
"fmt"
"strings"
)
//判断关键字在字符串中出现的索引位置
func main() {
var (
s string = "aabbccddaccdbbcd"
str string = "cd"
)
//使用count统计关键字出现在字符串中的次数
count := strings.Count(s, str)
fmt.Printf("%v出现的次数%v", str, count)
}
[Running] go run "f:\goProject\src\dev_code\day15\example3\main\main.go"
cd出现的次数3
[Done] exited with code=0 in 0.548 seconds
6,重复
使用strings.Repeat函数(s, 3),前面是字符串后面是重复的次数
示例:
package main
import (
"fmt"
"strings"
)
func main() {
var (
s string = "abc"
)
//复制关键字段3次并返回完整字符串
result := strings.Repeat(s, 3)
fmt.Println(result)
}
[Running] go run "f:\goProject\src\dev_code\day15\example4\main\main.go"
abcabcabc
[Done] exited with code=0 in 0.562 seconds
7,大小写
用到函数strings.ToUpper和strings.ToLower
示例
package main
import (
"fmt"
"strings"
)
func main() {
var (
s string = "abc"
)
//字符串变大写
result1 := strings.ToUpper(s)
fmt.Println("大写", result1)
//字符串变小写
result2 := strings.ToLower(result1)
fmt.Println("大写", result2)
}
[Running] go run "f:\goProject\src\dev_code\day15\example4\main\main.go"
大写 ABC
大写 abc
[Done] exited with code=0 in 0.542 seconds
8,去除字符
使用函数strings.Trim。里面有多种操作如下示例
示例:去除收尾空白符
package main
import (
"fmt"
"strings"
)
//去除指定字符
func main() {
var str string = "this is abc web"
var s string = " abc "
fmt.Println("原长度", len(s))
//去除首尾空白标识符
result := strings.TrimSpace(s)
fmt.Printf("现长度:%d,内容:%s\n", len(result), result)
//去除首尾匹配关键字
result1 := strings.Trim(str, "this")
fmt.Println("Trim处理后的字符串:", result1)
result2 := strings.Trim(str, "web")
fmt.Println("Trim处理后的字符串:", result2)
//TrimLeft从左开始匹配关键字符,直到没有匹配到的字符为止,即使后面有匹配的字符也不会被删除
result3 := strings.TrimLeft(str, "this")
fmt.Println("TrimLeft处理后的字符串:", result3)
result4 := strings.TrimLeft(str, "thisac ")
fmt.Println("TrimLeft处理后的字符串:", result4)
//TrimRight从右开始匹配关键字符,直到没有匹配到的字符为止,即使后面有匹配的字符也不会被删除
result5 := strings.TrimRight(str, "cweb")
fmt.Println("TrimRight处理后的字符串:", result5)
}
[Running] go run "f:\goProject\src\dev_code\day15\example5\main\main.go"
原长度 6
现长度:3,内容:abc
Trim处理后的字符串: is abc web
Trim处理后的字符串: this is abc
TrimLeft处理后的字符串: is abc web
TrimLeft处理后的字符串: bc web
TrimRight处理后的字符串: this is abc
[Done] exited with code=0 in 0.551 seconds
9,切片处理
字符串变为字符切片有两个函数strings.Fields()(默认是空格作为分隔符分隔元素)和strings.Split()(可以指定分隔符来分隔元素)
示例:字符串以空格Fields
package main
import (
"fmt"
"strings"
)
//字符串切片处理
func main() {
var str string = "abc def ghi"
//Fields函数默认识别的符号是空格
result := strings.Fields(str)
fmt.Printf("数据类型:%T,数据格式:%v\n", result, result)
for i := 0; i < len(result); i++ {
fmt.Println(result[i])
}
}
[Running] go run "f:\goProject\src\dev_code\day15\example6\main\main.go"
数据类型:[]string,数据格式:[abc def ghi]
abc
def
ghi
[Done] exited with code=0 in 0.556 seconds
第二种Split
package main
import (
"fmt"
"strings"
)
//字符串切片处理
func main() {
var str string = "abc:def:ghi"
//Split识别其他的特殊符号分割
result := strings.Split(str, ":")
fmt.Printf("数据类型:%T,数据格式:%v\n", result, result)
}
[Running] go run "f:\goProject\src\dev_code\day15\example6\main\main.go"
数据类型:[]string,数据格式:[abc def ghi]
[Done] exited with code=0 in 0.564 seconds
把切片合成字符串Join(可以指定元素中间的分隔符)
package main
import (
"fmt"
"strings"
)
//字符串切片处理
func main() {
var str string = "abc:def:ghi"
//Split识别其他的特殊符号分割
result := strings.Split(str, ":")
fmt.Printf("数据类型:%T,数据格式:%v\n", result, result)
//把切片按指定分隔符合成字符串
result1 := strings.Join(result, " ")
fmt.Printf("数据类型:%T,数据格式:%v\n", result1, result1)
}
[Running] go run "f:\goProject\src\dev_code\day15\example6\main\main.go"
数据类型:[]string,数据格式:[abc def ghi]
数据类型:string,数据格式:abc def ghi
[Done] exited with code=0 in 0.554 seconds
10,数值处理
示例:数值转换成字符串
package main
import (
"fmt"
"strconv"
)
func main() {
var num int = 123456
fmt.Printf("num的数值类型:%T\n", num)
//数值转换字符串
result := strconv.Itoa(num)
fmt.Printf("result的数值类型:%T\n", result)
fmt.Println(result)
}
[Running] go run "f:\goProject\src\dev_code\day15\example7\main\main.go"
num的数值类型:int
result的数值类型:string
123456
示例:使用sprintf函数处理
package main
import (
"fmt"
)
func main() {
var num int = 123456
fmt.Printf("num的数值类型:%T\n", num)
//使用sprintf()转换字符串,可以实现多类型转换
result := fmt.Sprintf("%d", num)
fmt.Printf("resultd的数据类型是:%T\n", result)
}
[Running] go run "f:\goProject\src\dev_code\day15\example7\main\main.go"
num的数值类型:int
resultd的数据类型是:string
示例:字符串转换成整型
package main
import (
"fmt"
"strconv"
)
func main() {
var num string = "123456"
//字符串转换成整型
result, err := strconv.Atoi(num)
if err == nil {
fmt.Printf("result的数据类型是:%T\n", result)
} else {
fmt.Println(err)
}
}
[Running] go run "f:\goProject\src\dev_code\day15\example7\main\main.go"
result的数据类型是:int
用用函数strconv.Atoi()转换成int类型会返回两个值,不能转换的会返回err值
例:
package main
import (
"fmt"
"strconv"
)
func main() {
var num string = "abc"
//字符串转换成整型
result, err := strconv.Atoi(num)
if err == nil {
fmt.Printf("result的数据类型是:%T\n", result)
} else {
fmt.Println(err)
}
}
[Running] go run "f:\goProject\src\dev_code\day15\example7\main\main.go"
strconv.Atoi: parsing "abc": invalid syntax
//strconv.Atoi:解析“abc”:无效语法