最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年04月19日 14:40:29   作者:隱姓埋名4869  
這篇文章主要為大家總結(jié)了Go語言中常見的幾種字符串操作,例如:位置索引、替換、統(tǒng)計(jì)次數(shù)等,文中的示例代碼講解詳細(xì),感興趣的可以了解一下

1. 字節(jié)數(shù)組

字節(jié)與字符的區(qū)別

  • 字節(jié)(Byte) 是計(jì)量單位,表示數(shù)據(jù)量多少,是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲(chǔ)容量的一種計(jì)量單位,通常情況下一字節(jié)等于八位
  • 字符(Character) 是計(jì)算機(jī)中使用的字母、數(shù)字、字和符號,比如'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,長度: %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,使用+進(jìn)行拼接
		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("請輸入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
請輸入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("長度:", 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ù)

默認(rèn)識別空格進(jìn)行切片處理

package main

import (
	"fmt"
	"strings"
)

func main() {
	var str string = "abc def ghi"
	//Fields函數(shù)默認(rèn)識別的符號是空格
	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"
	//識別逗號進(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)只能識別空格,不能識別其他符號,而Split()函數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang打包成帶圖標(biāo)的exe可執(zhí)行文件

    golang打包成帶圖標(biāo)的exe可執(zhí)行文件

    這篇文章主要給大家介紹了關(guān)于golang打包成帶圖標(biāo)的exe可執(zhí)行文件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Golang?RPC的原理與簡單調(diào)用詳解

    Golang?RPC的原理與簡單調(diào)用詳解

    RPC(Remote?Procedure?Call),主要是幫助我們屏蔽網(wǎng)絡(luò)編程細(xì)節(jié)?,使我們更專注于業(yè)務(wù)邏輯,所以本文主要來和大家聊聊RPC的原理與簡單調(diào)用,希望對大家有所幫助
    2023-05-05
  • 如何用golang運(yùn)行第一個(gè)項(xiàng)目

    如何用golang運(yùn)行第一個(gè)項(xiàng)目

    這篇文章主要介紹了如何用golang運(yùn)行第一個(gè)項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • golang給函數(shù)參數(shù)設(shè)置默認(rèn)值的幾種方式小結(jié)(函數(shù)參數(shù)默認(rèn)值

    golang給函數(shù)參數(shù)設(shè)置默認(rèn)值的幾種方式小結(jié)(函數(shù)參數(shù)默認(rèn)值

    在日常開發(fā)中我們有時(shí)候需要使用默認(rèn)設(shè)置,下面這篇文章主要給大家介紹了關(guān)于golang給函數(shù)參數(shù)設(shè)置默認(rèn)值的幾種方式小結(jié)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Go函數(shù)的使用示例教程

    Go函數(shù)的使用示例教程

    這篇文章主要介紹了Go函數(shù)的使用示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • golang MarshalJson的實(shí)現(xiàn)

    golang MarshalJson的實(shí)現(xiàn)

    本文主要介紹了golang MarshalJson的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 一文帶你讀懂Golang?sync包之sync.Mutex

    一文帶你讀懂Golang?sync包之sync.Mutex

    sync.Mutex可以說是sync包的核心了,?sync.RWMutex,?sync.WaitGroup...都依賴于他,?本章我們將帶你一文讀懂sync.Mutex,快跟隨小編一起學(xué)習(xí)一下吧
    2023-04-04
  • 記一次go語言使用time.Duration類型踩過的坑

    記一次go語言使用time.Duration類型踩過的坑

    本文主要介紹了記一次go語言使用time.Duration類型踩過的坑,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • go reflect要不要傳指針原理詳解

    go reflect要不要傳指針原理詳解

    這篇文章主要為大家介紹了go reflect要不要傳指針原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換

    Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換

    在軟件開發(fā)的世界里,數(shù)據(jù)類型轉(zhuǎn)換是一項(xiàng)基礎(chǔ)而重要的技能,尤其在Go語言這樣類型嚴(yán)格的語言中,正確高效地進(jìn)行類型轉(zhuǎn)換對于性能優(yōu)化和代碼質(zhì)量至關(guān)重要,本文給大家介紹了Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換,需要的朋友可以參考下
    2024-02-02

最新評論

文山县| 浪卡子县| 中西区| 舒城县| 吉首市| 射洪县| 宁德市| 黄石市| 广灵县| 石门县| 桂东县| 大田县| 洛川县| 玛纳斯县| 沧州市| 防城港市| 监利县| 从江县| 潢川县| 石嘴山市| 华安县| 高邑县| 双桥区| 齐齐哈尔市| 延川县| 汉中市| 普宁市| 玉溪市| 海原县| 东莞市| 阿克苏市| 洪湖市| 合水县| 阿荣旗| 临湘市| 师宗县| 凌海市| 云梦县| 武义县| 凤山县| 齐河县|