欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GO語言字符串常用操作小結

 更新時間:2023年02月09日 09:39:32   作者:該啟程了  
本文主要介紹了GO語言字符串常用操作小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

字符串簡介

字符串是一段固定長度字符連接起來的字符序列,GO語言中的字符串是由單個字節(jié)連起來的,其字符串字節(jié)是由 UTF-8 編碼來表示unicode 文本的。

由于該編碼占用字節(jié)長度的不確定性,所以在GO語言中,字符串會根據需要占用 1~4 個字節(jié),這于其他編程語言不同(比如 c++ python java)比如說Java字符串始終占用2個字節(jié)。GO這樣做不僅減少了內存和硬盤的占用,也不需要其他語言那樣對 UTF-8 進行編解碼。

GO中字符串和Java中字符串一樣,其值是不可變的(創(chuàng)建之后要修改,只會將指針指向新的字符串),當代碼中存在字符串,編譯器會將其標記成只讀數(shù)據 SRODATA

常用方法

中文字符串截取

在GO中我們可以直接通過切片來截取字符串,但是當截取的字符串是中文的時候就要注意了,在GO中,英文是占用一個字節(jié)的,中文占用的的是3個字節(jié),當我們直接用切片截取的時候,可能會將中文的編碼截成兩半,結果就是最后那個字是一個亂碼。

這里比較推薦使用 rune 數(shù)組來截取字符串,截取后再轉為字符串。通過 rune 截取的不是字節(jié)了,該數(shù)組每一條都存儲這一個字(英文字母,中文漢字)

示例如下:示例

package main

import (
?? ?"fmt"
?? ?"unicode/utf8"
)

func main() {
?? ?// 聲明一個字符串
?? ?str := "這是一串字符串,測試 go 的方法"

?? ?// 字符串長度
?? ?fmt.Println(utf8.RuneCountInString(str))
?? ?// 字節(jié)長度
?? ?fmt.Println(len(str))

?? ?// 這個截取是按字節(jié)來截取的
?? ?str1 := str[0:9]
?? ?fmt.Println(str1)
?? ?// 一個中文占用3個字節(jié),當截取10個字節(jié)時候,最后一個漢字就會發(fā)生亂碼
?? ?str2 := str[0:10]
?? ?fmt.Println(str2)

?? ?// 將字符串轉為 rune 數(shù)組,然后截取再轉回字符串
?? ?strRune := []rune(str)
?? ?fmt.Println(len(strRune))
?? ?// 注意了這里不是字節(jié)了,而是4個字
?? ?fmt.Println(string(strRune[0:4]))
}

//輸出
//17
//43
//這是一
//這是一?
//17
//這是一串

反轉字符串

這里還是用到了上面用的 rune 數(shù)組,先轉為 rune 數(shù)組類型,反轉后,再轉回字符即可。示例

package main

import "fmt"

func main() {
?? ?a := "123345asdfg"

?? ?reverseStr := reverseString(a)
?? ?fmt.Println(reverseStr)
}

func reverseString(a string) string {
?? ?b := []rune(a)

?? ?for i := 0; i < len(b)/2; i++ {
?? ??? ?// 注意:不可以像下面這樣寫哦
?? ??? ?//b[i] = b[len(b)-i-1]
?? ??? ?//b[len(b)-i-1] = b[i]

?? ??? ?// 可以理解為將兩個都先取出來再同時賦值,不得不說還是很簡便的,否則就需要一個第三方變量才能完成互換
?? ??? ?b[i], b[len(b)-i-1] = b[len(b)-i-1], b[i]
?? ?}

?? ?return string(b)
}

// gfdsa543321

字符串大小寫操作

這個就很簡單了,直接調用 strings 包下提供的兩個方法就可以了

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := "Hello World"

?? ?// 所有字母轉為大寫
?? ?upper := strings.ToUpper(str)
?? ?fmt.Println(upper)
?? ?// 所有字母轉為小寫
?? ?lower := strings.ToLower(str)
?? ?fmt.Println(lower)
}

去除字符串首位空格

可以使用 strings 包下的方法 TrimSpace() ?,或者使用 Trim() ?方法,該方法可以刪除字符串中連續(xù)字符,用來刪除空格當然也是可以的

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := " GO 非常好用 "

?? ?// 刪除連續(xù)字符
?? ?str1 := strings.Trim(str, " ")
?? ?// 刪除首位空格
?? ?str2 := strings.TrimSpace(str)

?? ?fmt.Println(str)
?? ?fmt.Println(str2)
?? ?fmt.Println(str1)
}

合并字符串

join() 用于將字符串切片拼接為字符串,第一個參數(shù)傳字符切片,第二個是連接符,下面示例中就是使用的空格連接

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := []string{"I", "Love", "GO"}
?? ?res := strings.Join(str, " ")
?? ?fmt.Println(res)
}

分割字符串

strings 包提供了 Split()、SplitN、SplitAfter、SplitAfterN() ?4個函數(shù)來處理正則分割字符串

func Splic(s,sep string) []string

其中 s 為被正則分割的字符串,sep為分隔符

func SplicN(s,sep string,n int) []string

其中,s 為被正則分割的字符串,sep為分隔符,n為控制分割的片數(shù),如果為 -1 則不限制

func SplicAfter(s,sep string) []string

與上面方法功能相同但是會保留分割符

func Splic(s,sep string) []string

與上面方法功能相同但是會保留分割符

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := "I_Love_Golang_web"

?? ?split1 := strings.Split(str, "_")
?? ?split2 := strings.SplitN(str, "_", 3)
?? ?split3 := strings.SplitAfter(str, "_")
?? ?split4 := strings.SplitAfterN(str, "_", 2)

?? ?for i := range split1 {
?? ??? ?fmt.Println(split1[i])
?? ?}
?? ?// I
?? ?// Love
?? ?// Golang
?? ?// web

?? ?for i := range split2 {
?? ??? ?fmt.Println(split2[i])
?? ?}
?? ?// I
?? ?// Love
?? ?// Golang_web

?? ?for i := range split3 {
?? ??? ?fmt.Println(split3[i])
?? ?}
?? ?// I_
?? ?// Love_
?? ?// Golang_
?? ?// web

?? ?for i := range split4 {
?? ??? ?fmt.Println(split4[i])
?? ?}
?? ?// I_
?? ?// Love_Golang_web
}

到此這篇關于GO 語言字符串常用操作集錦的文章就介紹到這了,更多相關GO 字符串常用操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • Golang中slice刪除元素的性能對比

    Golang中slice刪除元素的性能對比

    go沒有對刪除切片元素提供專用的語法或者接口,需要使用切片本身的特性來刪除元素,下面這篇文章主要給大家介紹了關于Golang中slice刪除元素的性能對比,需要的朋友可以參考下
    2022-06-06
  • golang使用sync.singleflight解決熱點緩存穿透問題

    golang使用sync.singleflight解決熱點緩存穿透問題

    在go的sync包中,有一個singleflight包,里面有一個?singleflight.go文件,代碼加注釋,一共200行出頭,通過?singleflight可以很容易實現(xiàn)緩存和去重的效果,避免重復計算,接下來我們就給大家詳細介紹一下sync.singleflight如何解決熱點緩存穿透問題
    2023-07-07
  • 快速解決Golang Map 并發(fā)讀寫安全的問題

    快速解決Golang Map 并發(fā)讀寫安全的問題

    這篇文章主要介紹了快速解決Golang Map 并發(fā)讀寫安全的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言獲取文件的名稱、前綴、后綴

    Go語言獲取文件的名稱、前綴、后綴

    這篇文章主要介紹了Go語言獲取文件的名稱、前綴、后綴,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go語言文件操作的方法

    Go語言文件操作的方法

    這篇文章主要介紹了Go語言文件操作的方法,涉及文件的讀寫及關閉等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 詳解Go函數(shù)和方法之間有什么區(qū)別

    詳解Go函數(shù)和方法之間有什么區(qū)別

    這篇文章就簡單和大家聊一聊在Go中函數(shù)與方法之間的區(qū)別,文章通過代碼示例介紹的非常詳細,對我們的學習或工作有一定的幫助,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • Go語言數(shù)據結構之二叉樹必會知識點總結

    Go語言數(shù)據結構之二叉樹必會知識點總結

    如果你是一個開發(fā)人員,或多或少對樹型結構都有一定的認識。二叉樹作為樹的一種,是一種重要的數(shù)據結構,也是面試官經??嫉臇|西。本文為大家總結了一些二叉樹必會知識點,需要的可以參考一下
    2022-08-08
  • golang中使用sync.Map的方法

    golang中使用sync.Map的方法

    這篇文章主要介紹了golang中使用sync.Map的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • golang Goroutine超時控制的實現(xiàn)

    golang Goroutine超時控制的實現(xiàn)

    日常開發(fā)中我們大概率會遇到超時控制的場景,比如一個批量耗時任務、網絡請求等,本文主要介紹了golang Goroutine超時控制的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • Go語言入門學習之Channel通道詳解

    Go語言入門學習之Channel通道詳解

    go routine可以使用channel來進行通信,使用通信的手段來共享內存,下面這篇文章主要給大家介紹了關于Go語言入門學習之Channel通道的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07

最新評論