Go 語言字串常見操作
阿新 • • 發佈:2022-04-18
@
目錄1. 位元組陣列
位元組與字元的區別
-
位元組(Byte) 是計量單位,表示資料量多少,是計算機資訊科技用於計量儲存容量的一種計量單位,通常情況下一位元組等於八位
-
字元(Character) 是計算機中使用的字母、數字、字和符號,比如'A'、'B'、'$'、'&'等
-
一般在英文狀態下一個字母或字元佔用一個位元組,一個漢字用兩個位元組表示
-
通俗點來說,人的語言就是字元,而位元組是機器的語言
示例
package main import "fmt" func main() { var ( str1 = "hello" str2 = "world" ) str3 := str1 + " " + str2 //字串轉換成位元組陣列 tmp := []byte(str3) fmt.Printf("資料: %s,長度: %d,資料型別: %T\n", str3, len(str3), str3) fmt.Println("位元組陣列:", tmp) fmt.Printf("資料: %s,長度: %d,資料型別: %T\n", tmp, len(tmp), tmp) //位元組陣列轉字串 fmt.Println("位元組陣列轉字串:", string(tmp)) //反轉函式呼叫 fmt.Println("反轉: ", Reverse(str3)) } //反轉函式 func Reverse(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 } //輸出結果如下 資料: hello world,長度: 11,資料型別: string 位元組陣列: [104 101 108 108 111 32 119 111 114 108 100] 資料: hello world,長度: 11,資料型別: []uint8 位元組陣列轉字串: hello world 反轉: dlrow olleh
Sprintf
的作用
package main
import "fmt"
func main() {
var a = 88
fmt.Printf("a的數值: %d , 型別: %T\n", a, a)
b := fmt.Sprintf("%d", a)
fmt.Printf("b的數值: %s , 型別: %T\n", b, b)
}
//輸出結果如下
a的數值: 88 , 型別: int
b的數值: 88 , 型別: string
2. 頭尾處理
prefix()函式
判斷字首suffix()函式
判斷後綴
使用prefix函式
判斷URL是否是以http://
為開頭,如果不是,則加上http://
使用
suffix函式
判斷路徑是否以/
結尾,如果不是,則加上/
為結尾
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 {
//判斷是否以/結尾,返回布林型別賦予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()函式
判斷出現在前面的位置LastIndex()函式
判斷出現在末尾的位置
判斷子字串在字串中首次出現的位置和在末尾出現的位置
package main
import (
"fmt"
"strings"
)
func main() {
var (
a = "abbaabcddccd"
str = "cd"
)
//判斷str在a中首次出現的位置
head := strings.Index(a, str)
tail := strings.LastIndex(a, str)
fmt.Printf("首次出現的位置:%d\n最後出現的位置:%d\n", head, tail)
}
//輸出結果如下
首次出現的位置:6
最後出現的位置:10
4. 替換
Replace()函式
格式如下:Replace(原字串,原欄位,新字串,新欄位,替換次數)
-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)
}
//輸出結果如下
替換前: abbaabcddccd
全部替換後: abbaabCDdcCD
不進行替換: abbaabcddccd
5. 統計次數
Count()函式
統計次數
package main
import (
"fmt"
"strings"
)
func main() {
var a = "abbcddcedsca"
count := strings.Count(a, "cd")
fmt.Printf("count: %v\n", count)
}
//輸出結果如下
count: 1
6. 重複
Repeat()函式
重複輸出多次
package main
import (
"fmt"
"strings"
)
func main() {
var a = "加油~"
result := strings.Repeat(a, 3)
fmt.Printf("result: %v\n", result)
}
//輸出結果如下
result: 加油~加油~加油~
7. 大小寫
ToUpper()函式
轉換大寫ToLower()函式
轉換小寫
package main
import (
"fmt"
"strings"
)
func main() {
var a = "hello"
//轉換大寫
result1 := strings.ToUpper(a)
fmt.Printf("大寫: %v\n", result1)
//把上面轉換的大寫給轉成小寫
result2 := strings.ToLower(result1)
fmt.Printf("小寫: %v\n", result2)
}
//輸出結果如下
大寫: HELLO
小寫: hello
8. 去除字元
TrimSpace()函式
去除空白字元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))
}
//輸出結果如下
長度: 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")
//空格也需匹配刪除,直到沒有指定的字元可以匹配為止
result3 := strings.TrimLeft(a, "this ")
//從右往左刪除所有指定的字元,直到遇到不包含在內的字元為止
result4 := strings.TrimRight(a, "web")
fmt.Println("從左往右刪除:", result2)
fmt.Println("從左往右刪除,有空格:", result3)
fmt.Println("從右往左刪除:", result4)
}
//輸出結果如下
尾部去除: this is test
從左往右刪除: is test web
從左往右刪除,有空格: est web
從右往左刪除: this is test
9. 字串切片處理
Fields()函式
Split()函式
- 預設識別空格進行切片處理
package main
import (
"fmt"
"strings"
)
func main() {
var str string = "abc def ghi"
//Fields函式預設識別的符號是空格
result1 := strings.Fields(str)
fmt.Printf("資料型別: %T , 資料格式: %v\n", result1, result1)
for i := 0; i < len(result1); i++ {
fmt.Println(result1[i])
}
}
//輸出結果如下
資料型別: []string , 資料格式: [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("資料型別: %T , 資料格式: %v\n", result, result)
}
//輸出結果如下
資料型別: []string , 資料格式: [abc def ghi]
推薦使用Split()函式
進行分隔
因為fields()函式
預設只能識別空格,不能識別其他符號,而Split()函式
則均可以識別
- 把切片按指定分隔符進行轉換成字串
Join()函式
package main
import (
"fmt"
"strings"
)
func main() {
//定義切片
var slice = []string{"123", "456", "789"}
fmt.Printf("切片: %v\n", slice)
//切片轉換成字串
result := strings.Join(slice, ":")
fmt.Printf("資料結構: %v , 資料型別: %T", result, result)
}
//輸出結果如下
切片: [123 456 789]
資料結構: 123:456:789 , 資料型別: string
10. 數值處理
- 使用
strconv.Itoa()函式
將數值轉換成字串
package main
import (
"fmt"
"strconv"
)
func main() {
var num int = 12345678
fmt.Printf("初始資料型別: %T\n", num)
fmt.Printf("初始值: %d\n", num)
//轉換成字串
result := strconv.Itoa(num)
fmt.Printf("轉換後資料型別: %T\n", result)
fmt.Printf("轉換後值為: %s", result)
}
//輸出結果如下
初始資料型別: int
初始值: 12345678
轉換後資料型別: string
轉換後值為: 12345678
- 使用
Sprintf()函式
將整數轉換成字串
package main
import (
"fmt"
)
func main() {
var num int = 12345678
fmt.Printf("初始資料型別: %T\n", num)
//使用Sprintf()轉換成字串,可以實現多型別的轉換
result := fmt.Sprintf("%d", num)
fmt.Printf("轉換後資料型別:%T\n", result)
}
//輸出結果如下
初始資料型別: int
轉換後資料型別:string
- 使用
strconv.Atoi()函式
進行字串轉換整數
package main
import (
"fmt"
"strconv"
)
func main() {
var str string = "12345678"
//字串轉整數
result, err := strconv.Atoi(str)
//如果有轉換過程中有錯,就丟擲錯誤,沒有錯就返回資料型別
if err == nil {
fmt.Printf("資料型別: %T\n", result)
} else {
fmt.Println(err)
}
}
//輸出結果
資料型別: int