Go語言字符串常見操作的使用匯總
1. 字節(jié)數(shù)組
字節(jié)與字符的區(qū)別
- 字節(jié)(Byte) 是計(jì)量單位,表示數(shù)據(jù)量多少,是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲(chǔ)容量的一種計(jì)量單位,通常情況下一字節(jié)等于八位
- 字符(Character) 是計(jì)算機(jī)中使用的字母、數(shù)字、字和符號(hào),比如'A'、'B'、'$'、'&'等
- 一般在英文狀態(tài)下一個(gè)字母或字符占用一個(gè)字節(jié),一個(gè)漢字用兩個(gè)字節(jié)表示
- 通俗點(diǎn)來說,人的語言就是字符,而字節(jié)是機(jī)器的語言
示例
package main
import "fmt"
func main() {
var (
str1 = "hello"
str2 = "world"
)
str3 := str1 + " " + str2
//字符串轉(zhuǎn)換成字節(jié)數(shù)組
tmp := []byte(str3)
fmt.Printf("數(shù)據(jù): %s,長(zhǎng)度: %d,數(shù)據(jù)類型: %T\n", str3, len(str3), str3)
fmt.Println("字節(jié)數(shù)組:", tmp)
fmt.Printf("數(shù)據(jù): %s,長(zhǎng)度: %d,數(shù)據(jù)類型: %T\n", tmp, len(tmp), tmp)
//字節(jié)數(shù)組轉(zhuǎn)字符串
fmt.Println("字節(jié)數(shù)組轉(zhuǎn)字符串:", string(tmp))
//反轉(zhuǎn)函數(shù)調(diào)用
fmt.Println("反轉(zhuǎn): ", Reverse(str3))
}
//反轉(zhuǎn)函數(shù)
func Reverse(str string) string {
var (
result string
leng int = len(str)
)
for i := 0; i < leng; i++ {
//sprintf轉(zhuǎn)換數(shù)據(jù)類型為string,使用+進(jìn)行拼接
result = result + fmt.Sprintf("%c", str[leng-i-1])
}
return result
}
輸出結(jié)果如下
數(shù)據(jù): hello world,長(zhǎng)度: 11,數(shù)據(jù)類型: string
字節(jié)數(shù)組: [104 101 108 108 111 32 119 111 114 108 100]
數(shù)據(jù): hello world,長(zhǎng)度: 11,數(shù)據(jù)類型: []uint8
字節(jié)數(shù)組轉(zhuǎn)字符串: hello world
反轉(zhuǎn): dlrow olleh
Sprintf的作用
package main
import "fmt"
func main() {
var a = 88
fmt.Printf("a的數(shù)值: %d , 類型: %T\n", a, a)
b := fmt.Sprintf("%d", a)
fmt.Printf("b的數(shù)值: %s , 類型: %T\n", b, b)
}
輸出結(jié)果如下
a的數(shù)值: 88 , 類型: int
b的數(shù)值: 88 , 類型: string
2. 頭尾處理
prefix()函數(shù)判斷前綴
suffix()函數(shù)判斷后綴
使用prefix函數(shù)判斷URL是否是以http://為開頭,如果不是,則加上http://使用suffix函數(shù)判斷路徑是否以/結(jié)尾,如果不是,則加上/為結(jié)尾
package main
import (
"fmt"
"strings"
)
func main() {
var (
url string
path string
)
fmt.Println("請(qǐng)輸入U(xiǎn)RL和路徑:")
fmt.Scanf("%s%s", &url, &path)
fmt.Printf("URL: %s\n", urlProcess(url))
fmt.Printf("路徑: %s", pathProcess(path))
}
//字符串頭部處理
func urlProcess(url string) string {
//判斷是否以http://開頭,返回布爾類型賦予result
result := strings.HasPrefix(url, "http://")
if !result {
url = fmt.Sprintf("http://%s", url)
}
return url
}
//字符串尾部處理
func pathProcess(path string) string {
//判斷是否以/結(jié)尾,返回布爾類型賦予result
result := strings.HasSuffix(path, "/")
if !result {
path = fmt.Sprintf("%s/", path)
}
return path
}
終端輸入如下:
PS D:\goproject\src\test\main> go run .\main.go
請(qǐng)輸入U(xiǎn)RL和路徑:
www.google.com /opt/conf/k8s
URL: http://www.google.com
路徑: /opt/conf/k8s/
3. 位置索引
Index()函數(shù)判斷出現(xiàn)在前面的位置
LastIndex()函數(shù)判斷出現(xiàn)在末尾的位置
判斷子字符串在字符串中首次出現(xiàn)的位置和在末尾出現(xiàn)的位置
package main
import (
"fmt"
"strings"
)
func main() {
var (
a = "abbaabcddccd"
str = "cd"
)
//判斷str在a中首次出現(xiàn)的位置
head := strings.Index(a, str)
tail := strings.LastIndex(a, str)
fmt.Printf("首次出現(xiàn)的位置:%d\n最后出現(xiàn)的位置:%d\n", head, tail)
}輸出結(jié)果如下
首次出現(xiàn)的位置:6
最后出現(xiàn)的位置:10
4. 替換
Replace()函數(shù)格式如下:
Replace(原字符串,原字段,新字符串,新字段,替換次數(shù)) -1表示全部替換,0表示不替換
package main
import (
"fmt"
"strings"
)
func main() {
var (
a = "abbaabcddccd"
)
//把cd替換成CD,-1表示全部替換,0表示不替換
result := strings.Replace(a, "cd", "CD", -1)
fmt.Printf("替換前: %v\n", a)
fmt.Printf("全部替換后: %v\n", result)
result1 := strings.Replace(a, "cd", "CD", 0)
fmt.Printf("不進(jìn)行替換: %v\n", result1)
}
輸出結(jié)果如下
替換前: abbaabcddccd
全部替換后: abbaabCDdcCD
不進(jìn)行替換: abbaabcddccd
5. 統(tǒng)計(jì)次數(shù)
Count()函數(shù)統(tǒng)計(jì)次數(shù)
package main
import (
"fmt"
"strings"
)
func main() {
var a = "abbcddcedsca"
count := strings.Count(a, "cd")
fmt.Printf("count: %v\n", count)
}
輸出結(jié)果如下
count: 1
6. 重復(fù)
Repeat()函數(shù)重復(fù)輸出多次
package main
import (
"fmt"
"strings"
)
func main() {
var a = "加油~"
result := strings.Repeat(a, 3)
fmt.Printf("result: %v\n", result)
}
輸出結(jié)果如下
result: 加油~加油~加油~
7. 大小寫
ToUpper()函數(shù)轉(zhuǎn)換大寫
ToLower()函數(shù)轉(zhuǎn)換小寫
package main
import (
"fmt"
"strings"
)
func main() {
var a = "hello"
//轉(zhuǎn)換大寫
result1 := strings.ToUpper(a)
fmt.Printf("大寫: %v\n", result1)
//把上面轉(zhuǎn)換的大寫給轉(zhuǎn)成小寫
result2 := strings.ToLower(result1)
fmt.Printf("小寫: %v\n", result2)
}
輸出結(jié)果如下
大寫: HELLO
小寫: hello
8. 去除字符
TrimSpace()函數(shù)去除空白字符
TrimLeft()從左往右刪除
TrimRight()從右往左刪除
去除首尾空白字符
package main
import (
"fmt"
"strings"
)
func main() {
var a = " abc "
fmt.Println("長(zhǎng)度:", len(a))
//去除首位空白的字符
result1 := strings.TrimSpace(a)
fmt.Println("去除首尾空白字符:", result1, "\n長(zhǎng)度:", len(result1))
}
輸出結(jié)果如下
長(zhǎng)度: 5
去除首尾空白字符: abc
長(zhǎng)度: 3
去除指定位置字符
package main
import (
"fmt"
"strings"
)
func main() {
var a = "this is test web"
//去掉字符串首尾部web字符
result1 := strings.Trim(a, "web")
fmt.Println("尾部去除:", result1)
//從左往右刪除所有指定的字符,直到遇到不包含在指定的字符為止
result2 := strings.TrimLeft(a, "this")
//空格也需匹配刪除,直到?jīng)]有指定的字符可以匹配為止
result3 := strings.TrimLeft(a, "this ")
//從右往左刪除所有指定的字符,直到遇到不包含在內(nèi)的字符為止
result4 := strings.TrimRight(a, "web")
fmt.Println("從左往右刪除:", result2)
fmt.Println("從左往右刪除,有空格:", result3)
fmt.Println("從右往左刪除:", result4)
}
輸出結(jié)果如下
尾部去除: this is test
從左往右刪除: is test web
從左往右刪除,有空格: est web
從右往左刪除: this is test
9. 字符串切片處理
Fields()函數(shù)
Split()函數(shù)
默認(rèn)識(shí)別空格進(jìn)行切片處理
package main
import (
"fmt"
"strings"
)
func main() {
var str string = "abc def ghi"
//Fields函數(shù)默認(rèn)識(shí)別的符號(hào)是空格
result1 := strings.Fields(str)
fmt.Printf("數(shù)據(jù)類型: %T , 數(shù)據(jù)格式: %v\n", result1, result1)
for i := 0; i < len(result1); i++ {
fmt.Println(result1[i])
}
}
輸出結(jié)果如下
數(shù)據(jù)類型: []string , 數(shù)據(jù)格式: [abc def ghi]
abc
def
ghi
識(shí)別其他符號(hào)分隔成切片
package main
import (
"fmt"
"strings"
)
func main() {
var str string = "abc,def,ghi"
//識(shí)別逗號(hào)進(jìn)行分隔切片
result := strings.Split(str, ",")
fmt.Printf("數(shù)據(jù)類型: %T , 數(shù)據(jù)格式: %v\n", result, result)
}
輸出結(jié)果如下
數(shù)據(jù)類型: []string , 數(shù)據(jù)格式: [abc def ghi]
推薦使用Split()函數(shù)進(jìn)行分隔
因?yàn)?code>fields()函數(shù)默認(rèn)只能識(shí)別空格,不能識(shí)別其他符號(hào),而Split()函數(shù)則均可以識(shí)別
把切片按指定分隔符進(jìn)行轉(zhuǎn)換成字符串
Join()函數(shù)
package main
import (
"fmt"
"strings"
)
func main() {
//定義切片
var slice = []string{"123", "456", "789"}
fmt.Printf("切片: %v\n", slice)
//切片轉(zhuǎn)換成字符串
result := strings.Join(slice, ":")
fmt.Printf("數(shù)據(jù)結(jié)構(gòu): %v , 數(shù)據(jù)類型: %T", result, result)
}
輸出結(jié)果如下
切片: [123 456 789]
數(shù)據(jù)結(jié)構(gòu): 123:456:789 , 數(shù)據(jù)類型: string
10. 數(shù)值處理
使用strconv.Itoa()函數(shù)將數(shù)值轉(zhuǎn)換成字符串
package main
import (
"fmt"
"strconv"
)
func main() {
var num int = 12345678
fmt.Printf("初始數(shù)據(jù)類型: %T\n", num)
fmt.Printf("初始值: %d\n", num)
//轉(zhuǎn)換成字符串
result := strconv.Itoa(num)
fmt.Printf("轉(zhuǎn)換后數(shù)據(jù)類型: %T\n", result)
fmt.Printf("轉(zhuǎn)換后值為: %s", result)
}
輸出結(jié)果如下
初始數(shù)據(jù)類型: int
初始值: 12345678
轉(zhuǎn)換后數(shù)據(jù)類型: string
轉(zhuǎn)換后值為: 12345678
使用Sprintf()函數(shù)將整數(shù)轉(zhuǎn)換成字符串
package main
import (
"fmt"
)
func main() {
var num int = 12345678
fmt.Printf("初始數(shù)據(jù)類型: %T\n", num)
//使用Sprintf()轉(zhuǎn)換成字符串,可以實(shí)現(xiàn)多類型的轉(zhuǎn)換
result := fmt.Sprintf("%d", num)
fmt.Printf("轉(zhuǎn)換后數(shù)據(jù)類型:%T\n", result)
}
輸出結(jié)果如下
初始數(shù)據(jù)類型: int
轉(zhuǎn)換后數(shù)據(jù)類型:string
使用strconv.Atoi()函數(shù)進(jìn)行字符串轉(zhuǎn)換整數(shù)
package main
import (
"fmt"
"strconv"
)
func main() {
var str string = "12345678"
//字符串轉(zhuǎn)整數(shù)
result, err := strconv.Atoi(str)
//如果有轉(zhuǎn)換過程中有錯(cuò),就拋出錯(cuò)誤,沒有錯(cuò)就返回?cái)?shù)據(jù)類型
if err == nil {
fmt.Printf("數(shù)據(jù)類型: %T\n", result)
} else {
fmt.Println(err)
}
}
輸出結(jié)果
數(shù)據(jù)類型: int

到此這篇關(guān)于Go語言字符串常見操作的使用匯總的文章就介紹到這了,更多相關(guān)Go語言字符串操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang小游戲開發(fā)實(shí)戰(zhàn)之飛翔的小鳥
這篇文章主要給大家介紹了關(guān)于golang小游戲開發(fā)實(shí)戰(zhàn)之飛翔的小鳥的相關(guān)資料,,本文可以帶你你從零開始,一步一步的開發(fā)出這款小游戲,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
三種Golang數(shù)組拷貝的實(shí)現(xiàn)方式與性能分析
在?Golang?中,有多種方式可以進(jìn)行數(shù)組的拷貝,本文將對(duì)其中的三種方式進(jìn)行性能分析,并比較它們的優(yōu)缺點(diǎn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解
這篇文章主要介紹了Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解,cast 是在Github上開源的工具庫,就像他的名字一樣,他為我們提供了非常便捷的類型轉(zhuǎn)化的方法2022-07-07
Golang實(shí)現(xiàn)文件夾的創(chuàng)建與刪除的方法詳解
這篇文章主要介紹了如何利用Go語言實(shí)現(xiàn)對(duì)文件夾的常用操作:創(chuàng)建于刪除。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05
Goland IDEA項(xiàng)目多開設(shè)置方式
這篇文章主要介紹了Goland IDEA項(xiàng)目多開設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
一個(gè)Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析
這篇文章主要為大家介紹了一個(gè)Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

