首頁 > 軟體

Go語言字串常見操作的使用匯總

2022-04-19 22:00:04

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,資料型別: %Tn", str3, len(str3), str3)
	fmt.Println("位元組陣列:", tmp)
	fmt.Printf("資料: %s,長度: %d,資料型別: %Tn", 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 , 型別: %Tn", a, a)
	b := fmt.Sprintf("%d", a)
	fmt.Printf("b的數值: %s , 型別: %Tn", 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: %sn", 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:goprojectsrctestmain> 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("首次出現的位置:%dn最後出現的位置:%dn", 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("替換前: %vn", a)
	fmt.Printf("全部替換後: %vn", result)
	result1 := strings.Replace(a, "cd", "CD", 0)
	fmt.Printf("不進行替換: %vn", result1)
}

輸出結果如下

替換前: abbaabcddccd
全部替換後: abbaabCDdcCD
不進行替換: abbaabcddccd

5. 統計次數

Count()函數統計次數

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "abbcddcedsca"

	count := strings.Count(a, "cd")
	fmt.Printf("count: %vn", count)
}

輸出結果如下

count: 1

6. 重複

Repeat()函數重複輸出多次

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "加油~"

	result := strings.Repeat(a, 3)
	fmt.Printf("result: %vn", result)
}

輸出結果如下

result: 加油~加油~加油~

7. 大小寫

ToUpper()函數轉換大寫

ToLower()函數轉換小寫

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "hello"
	//轉換大寫
	result1 := strings.ToUpper(a)
	fmt.Printf("大寫: %vn", result1)

	//把上面轉換的大寫給轉成小寫
	result2 := strings.ToLower(result1)
	fmt.Printf("小寫: %vn", 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 , 資料格式: %vn", 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 , 資料格式: %vn", 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("切片: %vn", 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("初始資料型別: %Tn", num)
	fmt.Printf("初始值: %dn", num)

	//轉換成字串
	result := strconv.Itoa(num)
	fmt.Printf("轉換後資料型別: %Tn", result)
	fmt.Printf("轉換後值為: %s", result)
}

輸出結果如下

初始資料型別: int
初始值: 12345678
轉換後資料型別: string
轉換後值為: 12345678

使用Sprintf()函數將整數轉換成字串

package main

import (
	"fmt"
)

func main() {
	var num int = 12345678
	fmt.Printf("初始資料型別: %Tn", num)

	//使用Sprintf()轉換成字串,可以實現多型別的轉換
	result := fmt.Sprintf("%d", num)
	fmt.Printf("轉換後資料型別:%Tn", 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("資料型別: %Tn", result)
	} else {
		fmt.Println(err)
	}
}

輸出結果

資料型別: int 

到此這篇關於Go語言字串常見操作的使用匯總的文章就介紹到這了,更多相關Go語言字串操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com