GO-重要操作:字符串处理

本文介绍了Go语言中对字符串的各种操作,包括字节数组转换、头尾处理、位置索引、替换、统计次数、重复、大小写转换、去除字符、切片处理和数值转换。通过实例展示了如何使用如`strings`包中的函数,如`Replace`、`Count`、`Repeat`等,以及`strconv`包进行字符串和数值间的转换。这些操作对于日常编程和数据处理非常实用。
摘要由CSDN通过智能技术生成

目录

1,字节数组

2,头尾处理

3,位置索引

4,替换

5,统计次数

6,重复

7,大小写

8,去除字符

9,切片处理

10,数值处理


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”:无效语法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值