1. 字节数组
字符是人的语言(文本:字符串),字节是机器的语言(图片,音频,视频 …),它们之间通过 ASCII 码互相翻译,一个英文字符等于一个字节,一个中文字符等于二个字节(UTF-8)。
package main
import "fmt"
func main() {
var (
str1 = "hello"
str2 = "world"
)
str3 := str1 + " " + str2
fmt.Printf("数据 %s 长度 %d\n",str3,len(str3))
fmt.Printf("数据 %s 类型 %T\n",str3)
fmt.Println()
// 字符串转换成字节数组
tmp := []byte(str3)
fmt.Printf("数据 %s 长度 %d\n",tmp,len(tmp))
fmt.Printf("数据 %s 类型 %T\n",tmp)
for i:=0;i<len(tmp);i++ {
fmt.Println(tmp[i])
}
// 字节数转组字符串
fmt.Println("字节数组转字符串:",string(tmp))
fmt.Println()
// 反转函数调用
fmt.Println("反转:",Reverse(str3))
}
// 反转
func Reverse(str string) string {
var (
result string
leng int = len(str)
)
for i := leng - 1; i >= 0; i-- {
// Sprintf 转换数据类型为 string,使用 + 进行拼接
// 重点:Sprintf 将任意类型转换成字符串
result = result + fmt.Sprintf("%c", str[i])
}
return result
}
// for i:=0;i<leng;i++ {
// result = result + fmt.Sprintf("%c",str[leng-i-1])
// }
// 结果
数据 hello world 长度 11
数据 hello world 类型 %!T(MISSING)
数据 hello world 长度 11
数据 hello world 类型 %!T(MISSING)
104
101
108
108
111
32
119
111
114
108
100
字节数组转字符串: hello world
反转: dlrow olleh
2. 头尾处理
示例:
- 判断字符串 s 是否以 prefix 开头,判断 URL 是否以 http:// 开头,如果不是,则加上 http://。
- 判断字符串 s 是否以 suffix 结尾,判断路径是否以 / 结尾,如果不是,则加上 / 结尾。
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://,不包含添加
func urlProcess(url string) string {
// 返回的 result 类型是 bool
result := strings.HasPrefix(url,"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
}
// 结果
www.baidu.com /root/bin
http://www.baidu.com
/root/bin/
3. 位置索引
示例:判断子字符串在字符串中首次出现的位置和最后出现的位置。
package main
import (
"fmt"
"strings"
)
func main() {
var (
s string = "adadascdadasacdsda"
str string = "cd"
)
start := strings.Index(s,str)
fmt.Println("关键词首部出现的位置:",start)
end := strings.LastIndex(s,str)
fmt.Println("关键词尾部部出现的位置:",end)
}
关键词首部出现的位置: 6
关键词尾部部出现的位置: 13
4. 替换
package main
import (
"fmt"
"strings"
)
func main() {
var (
s string = "adadascdadasacdsda"
str string = "cd"
)
// 替换 Replace(原字符串,原字段,新字段,替换次数)
// -1 表示全文替换,0 表示不替换
result := strings.Replace(s,str,"CD",-1)
fmt.Println(result)
}
adadasCDadasaCDsda
5. 统计次数
package main
import (
"fmt"
"strings"
)
func main() {
var (
s string = "adadascdadasacdsda"
str string = "cd"
)
// 使用 count 统计关键字在字符串中出现的次数
count := strings.Count(s,str)
fmt.Println("cd 出现的次数:",count)
}
cd 出现的次数: 2
6. 重复
package main
import (
"fmt"
"strings"
)
func main() {
var (
str string = "cd"
)
// 复制关键字段 3 次并返回完整字符串
result := strings.Repeat(str,3)
fmt.Println(result)
}
cdcdcd
7. 大小写
package main
import (
"fmt"
"strings"
)
func main() {
var (
str string = "abc"
)
// 字符串变大写
result1 := strings.ToUpper(str)
fmt.Println(result1)
// 字符串变小写
result2 := strings.ToLower(result1)
fmt.Println(result2)
}
ABC
abc
8. 去除字符
去除首尾空白字符
package main
import (
"fmt"
"strings"
)
func main() {
var (
str string = " abc "
)
fmt.Println("原长度:",len(str))
// 去除首尾空白字符
result := strings.TrimSpace(str)
fmt.Println(result)
fmt.Println("现长度:",len(result))
}
原长度: 6
abc
现长度: 3
去除首尾和指定位置字符
package main
import (
"fmt"
"strings"
)
func main() {
var (
str string = "this is abc web"
)
fmt.Println("原长度:",len(str))
/* 去除首尾空白字符
result := strings.TrimSpace(str)
fmt.Println(result)
fmt.Println("现长度:",len(result))
*/
// 去除首尾匹配关键字
result1 := strings.Trim(str,"this")
fmt.Println(result1)
fmt.Println("现长度:",len(result1))
}
原长度: 15
is abc web
现长度: 11
TrimLeft/TrimRight
- TrimLeft 从左匹配关键字符,进行删除,直到没有匹配上的字符为止,即使后面有匹配字符也不会被删除。
- TrimRight 从右匹配关键字符,进行删除,直到没有匹配上的字符为止,即使后面有匹配字符也不会被删除。
package main
import (
"fmt"
"strings"
)
func main() {
var (
str string = "this is abc web"
)
//T
result3 := strings.TrimLeft(str,"thisa ")
fmt.Println(result3)
result4 := strings.TrimRight(str,"_isweb ")
fmt.Println(result4)
}
bc web
this is abc
9. 切片处理
字符串以空格分割转换成切片。
package main
import (
"fmt"
"strings"
)
func main() {
var s string = "abc def hig"
// 转换切片,默认识别空格分隔
result := strings.Fields(s)
fmt.Printf("数据类型 %T\n内容是 %v\n",result,result)
for i:=0;i<len(result);i++ {
fmt.Println(result[i])
}
}
数据类型 []string
内容是 [abc def hig]
abc
def
hig
Split 识别其他特殊符号分割
package main
import (
"fmt"
"strings"
)
func main() {
var s string = "abc:def:hig"
// 转换切片,默认识别空格分隔
result1 := strings.Split(s,":")
fmt.Printf("数据类型 %T\n内容是 %v\n",result1,result1)
}
数据类型 []string
内容是 [abc def hig]
切片转换成字符串
package main
import (
"fmt"
"strings"
)
func main() {
var s string = "abc def hig"
result1 := strings.Split(s," ")
fmt.Printf("数据类型 %T\n内容是 %v\n",result1,result1)
//
str := strings.Join(result1,",")
fmt.Printf("数据类型 %T\n内容是 %v\n",str,str)
}
数据类型 []string
内容是 [abc def hig]
数据类型 string
内容是 abc,def,hig
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)
}
// 结果
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("result 数据类型 %T\n",result)
}
// 结果
num 数据类型 int
result 数据类型 string
- 字符串转换成数值。
package main
import (
"fmt"
"strconv"
)
func main() {
var str string = "123456"
// 字符串转整数
result, err := strconv.Atoi(str)
if err == nil {
fmt.Printf("数据类型 %T\n",result)
} else {
fmt.Println(err)
}
}
// 结果
数据类型 int