Go語言字符串常見操作的使用匯總
1. 字節(jié)數(shù)組
字節(jié)與字符的區(qū)別
- 字節(jié)(Byte) 是計量單位,表示數(shù)據(jù)量多少,是計算機信息技術(shù)用于計量存儲容量的一種計量單位,通常情況下一字節(jié)等于八位
- 字符(Character) 是計算機中使用的字母、數(shù)字、字和符號,比如'A'、'B'、'$'、'&'等
- 一般在英文狀態(tài)下一個字母或字符占用一個字節(jié),一個漢字用兩個字節(jié)表示
- 通俗點來說,人的語言就是字符,而字節(jié)是機器的語言
示例
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,長度: %d,數(shù)據(jù)類型: %T\n", str3, len(str3), str3) fmt.Println("字節(jié)數(shù)組:", tmp) fmt.Printf("數(shù)據(jù): %s,長度: %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,使用+進行拼接 result = result + fmt.Sprintf("%c", str[leng-i-1]) } return result }
輸出結(jié)果如下
數(shù)據(jù): hello world,長度: 11,數(shù)據(jù)類型: string
字節(jié)數(shù)組: [104 101 108 108 111 32 119 111 114 108 100]
數(shù)據(jù): hello world,長度: 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("請輸入URL和路徑:") 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
請輸入URL和路徑:
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("不進行替換: %v\n", result1) }
輸出結(jié)果如下
替換前: abbaabcddccd
全部替換后: abbaabCDdcCD
不進行替換: abbaabcddccd
5. 統(tǒng)計次數(shù)
Count()
函數(shù)統(tǒng)計次數(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("長度:", len(a)) //去除首位空白的字符 result1 := strings.TrimSpace(a) fmt.Println("去除首尾空白字符:", result1, "\n長度:", len(result1)) }
輸出結(jié)果如下
長度: 5
去除首尾空白字符: abc
長度: 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ù)
默認識別空格進行切片處理
package main import ( "fmt" "strings" ) func main() { var str string = "abc def ghi" //Fields函數(shù)默認識別的符號是空格 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
識別其他符號分隔成切片
package main import ( "fmt" "strings" ) func main() { var str string = "abc,def,ghi" //識別逗號進行分隔切片 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ù)
進行分隔
因為fields()函數(shù)
默認只能識別空格,不能識別其他符號,而Split()函數(shù)
則均可以識別
把切片按指定分隔符進行轉(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)換成字符串,可以實現(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ù)進行字符串轉(zhuǎn)換整數(shù)
package main import ( "fmt" "strconv" ) func main() { var str string = "12345678" //字符串轉(zhuǎn)整數(shù) result, err := strconv.Atoi(str) //如果有轉(zhuǎn)換過程中有錯,就拋出錯誤,沒有錯就返回數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
三種Golang數(shù)組拷貝的實現(xiàn)方式與性能分析
在?Golang?中,有多種方式可以進行數(shù)組的拷貝,本文將對其中的三種方式進行性能分析,并比較它們的優(yōu)缺點,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解
這篇文章主要介紹了Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解,cast 是在Github上開源的工具庫,就像他的名字一樣,他為我們提供了非常便捷的類型轉(zhuǎn)化的方法2022-07-07Golang實現(xiàn)文件夾的創(chuàng)建與刪除的方法詳解
這篇文章主要介紹了如何利用Go語言實現(xiàn)對文件夾的常用操作:創(chuàng)建于刪除。文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05一個Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析
這篇文章主要為大家介紹了一個Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04