如何在 Go 中處理 String

閱讀時間約 20 分鐘


raw-image

👨‍💻 簡介

一開始介紹基本資料型別時有稍微提到一點string的處理,今天介紹string的一些操作,像是檢查的功能、修改的功能、比較的功能等等。

檢查功能

  • strings.Contains:檢查一個string是否包含另一個string。
  • strings.ContainsAny:檢查一個string是否包含任何指定的Unicode字元。
  • strings.Count:計算subString在目標string中出現的次數。
  • strings.ContainsRune:檢查一個string是否包含指定的Unicode字元。

語法如下:

// 檢查一個string是否包含另一個string。
func strings.Contains(s, substr string) bool

// 檢查一個string是否包含任何指定的Unicode字元。
func strings.ContainsAny(s, chars string) bool

// 計算subString在目標string中出現的次數。
func strings.Count(s, substr string) int

// 檢查一個string是否包含指定的Unicode字元。
func strings.ContainsRune(s string, r rune) bool
package main

import (
"fmt"
"strings"
)

func main() {
text := "Hello, world! Hello, universe!"

// 檢查string是否包含另一個string
containsHello := strings.Contains(text, "Hello")
fmt.Println("Contains 'Hello':", containsHello) // true

// 檢查string是否包含指定的Unicode字元
containsAny := strings.ContainsAny(text, "aeiou")
fmt.Println("Contains any vowel:", containsAny) // true

// 計算subString在目標string中出現的次數
countHello := strings.Count(text, "Hello")
fmt.Println("Count 'Hello':", countHello) // 2

// 檢查string是否包含指定的Unicode字元
containsRune := strings.ContainsRune(text, 'H')
fmt.Println("Contains 'H':", containsRune) // true
}

修改功能

  • strings.Join:將多個string連接成一個新的string,並使用指定的分隔符分隔它們。
  • strings.Repeat:將一個string重複多次。
  • strings.Replace:替換string中的特定subString。
  • strings.ReplaceAll:替換string中的所有匹配subString。
  • strings.ToLower:將string轉換為小寫。
  • strings.ToUpper:將string轉換為大寫。
  • strings.Title:將string中的每個單字的首字母轉換為大寫。
  • strings.Trim:刪除string開頭和結尾的指定字符集合。
  • strings.TrimSpace:刪除string開頭和結尾的空格字符。
  • strings.TrimPrefix:刪除string開頭的指定前綴。
  • strings.TrimSuffix:刪除string結尾的指定後綴。
  • strings.TrimLeft:刪除string開頭的指定字符集合。
  • strings.TrimRight:刪除string結尾的指定字符集合。
  • strings.TrimFunc:使用自定義函數刪除string開頭和結尾的字符。

語法如下:

// 將多個string連接成一個新的string,並使用指定的分隔符分隔它們。
func strings.Join(strs []string, sep string) string

// 將一個string重複多次。
func strings.Repeat(s string, count int) string

// 替換string中的特定subString。
func strings.Replace(s, old, new string, n int) string

// 替換string中的所有匹配subString。
func strings.ReplaceAll(s, old, new string) string

// 將string轉換為小寫。
func strings.ToLower(s string) string

// 將string轉換為大寫。
func strings.ToUpper(s string) string

// 將string中的每個單字的首字母轉換為大寫。
func strings.Title(s string) string

// 刪除string開頭和結尾的指定字符集合。
func strings.Trim(s string, cutset string) string

// 刪除string開頭和結尾的空格字符。
func strings.TrimSpace(s string) string

// 刪除string開頭的指定前綴。
func strings.TrimPrefix(s, prefix string) string

// 刪除string結尾的指定後綴。
func strings.TrimSuffix(s, suffix string) string

// 刪除string開頭的指定字符集合。
func strings.TrimLeft(s string, cutset string) string

// 刪除string結尾的指定字符集合。
func strings.TrimRight(s string, cutset string) string

// 使用自定義函數刪除string開頭和結尾的字符。
func strings.TrimFunc(s string, f func(rune) bool) string
package main

import (
"fmt"
"strings"
)
func main() {
// string連接
words := []string{"apple", "banana", "cherry"}
joined := strings.Join(words, ", ")
fmt.Println(joined) // "apple, banana, cherry"

// string重複
text := "Go"
repeated := strings.Repeat(text, 3)
fmt.Println(repeated) // "GoGoGo"

// string替換
text = "Hello, world! Hello, universe!"

// 替換第一個匹配
replaced := strings.Replace(text, "Hello", "Hi", 1)
fmt.Println(replaced) // "Hi, world! Hello, universe!"

// 替換所有匹配
replacedAll := strings.ReplaceAll(text, "Hello", "Hi")
fmt.Println(replacedAll) // "Hi, world! Hi, universe!"

// string大小寫轉換
text = "Hello, World!"
lowerCase := strings.ToLower(text)
upperCase := strings.ToUpper(text)
fmt.Println(lowerCase) // "hello, world!"
fmt.Println(upperCase) // "HELLO, WORLD!"

// string前綴和後綴刪除
text = " Go is awesome! "

// 刪除string開頭和結尾的空格
trimmedText := strings.Trim(text, " ")
fmt.Printf("[%s]\n", trimmedText) // "[Go is awesome!]"

// 刪除string開頭的空格
trimmedLeftText := strings.TrimLeft(text, " ")
fmt.Printf("[%s]\n", trimmedLeftText) // "[Go is awesome! ]"

// 刪除string結尾的空格
trimmedRightText := strings.TrimRight(text, " ")
fmt.Printf("[%s]\n", trimmedRightText) // "[ Go is awesome!]"

// string前綴和後綴替換
prefixedText := "prefix: Hello, World!"
trimmedPrefixText := strings.TrimPrefix(prefixedText, "prefix: ")
fmt.Println(trimmedPrefixText) // "Hello, World!"

suffixedText := "Hello, World! -suffix"
trimmedSuffixText := strings.TrimSuffix(suffixedText, " -suffix")
fmt.Println(trimmedSuffixText) // "Hello, World!"

// 使用自定義函數刪除string
trimFuncText := "###TrimMe###"
trimmedFuncText := strings.TrimFunc(trimFuncText, func(r rune) bool {
return r == '#'
})
fmt.Println(trimmedFuncText) // "TrimMe"
}

比較功能

  • strings.Compare:比較兩個string是否相等,不過直接使用==或是!=更直覺。

語法如下:

// 比較兩個string,返回比較結果的整數值。
func strings.Compare(a, b string) int
package main

import (
"fmt"
"strings"
)

func main() {
str1 := "apple"
str2 := "banana"

// 使用 strings.Compare 比較string
result := strings.Compare(str1, str2)

switch {
case result < 0:
fmt.Printf("%s 小於 %s\n", str1, str2)
case result > 0:
fmt.Printf("%s 大於 %s\n", str1, str2)
default:
fmt.Printf("%s 等於 %s\n", str1, str2)
}
}

切割功能

  • strings.Split:將string按照指定的分隔符分割成subString。
  • strings.SplitAfter:在指定的分隔符之後切割string。

語法如下:

// 將string按照指定的分隔符分割成subString。
func strings.Split(s, sep string) []string

// 在指定的分隔符之後切割string。
func strings.SplitAfter(s, sep string) []string
package main

import (
"fmt"
"strings"
)

func main() {
// 使用 strings.Split 函數按照逗號分割string
s1 := "apple,banana,cherry"
words1 := strings.Split(s1, ",")
fmt.Printf("使用 Split 函數分割的結果:%v\n", words1)

// 使用 strings.SplitAfter 函數在逗號之後分割string
s2 := "apple,banana,cherry"
words2 := strings.SplitAfter(s2, ",")
fmt.Printf("使用 SplitAfter 函數分割的結果:%v\n", words2)
}

其他功能

  • strings.Index:找到一個subString在目標string中的第一次出現的索引位置。
  • strings.LastIndex:找到一個subString在目標string中的最後一次出現的索引位置。
  • strings.Fields:將string拆分為slice的subString,使用空格作為分隔符。

語法如下:

// 找到一個subString在目標string中的第一次出現的索引位置。
func strings.Index(s, substr string) int

// 找到一個subString在目標string中的最後一次出現的索引位置。
func strings.LastIndex(s, substr string) int

// 將string拆分為slice的subString,使用空格作為分隔符。
func strings.Fields(s string) []string
package main

import (
"fmt"
"strings"
)

func main() {
s := "Hello, world! Welcome to the world of Go. Hello, Go world."

// 找到一個subString在目標string中的第一次出現的索引位置。
substr := "world"
index := strings.Index(s, substr)
if index != -1 {
fmt.Printf("'%s' 第一次出現的索引位置:%d\n", substr, index)
} else {
fmt.Printf("'%s' 未在string中找到\n", substr)
}

// 找到一個subString在目標string中的最後一次出現的索引位置。
lastIndex := strings.LastIndex(s, substr)
if lastIndex != -1 {
fmt.Printf("'%s' 最後一次出現的索引位置:%d\n", substr, lastIndex)
} else {
fmt.Printf("'%s' 未在string中找到\n", substr)
}

// 將string拆分為slice的subString,使用空格作為分隔符。
text := "This is a sample sentence."
fields := strings.Fields(text)
fmt.Println("拆分後的subString slice:")
for _, field := range fields {
fmt.Println(field)
}
}

📚Reference

17會員
83內容數
golang
留言0
查看全部
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
👨‍💻 簡介 昨天講到 os package,今天繼續補充 os package底下的 exec package,這個package主要用來執行外部指令和處理指令的輸入和輸出,包括如何設定指令、執行指令以及處理輸出等等。
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
👨‍💻簡介 在 Go 語言中,reflect package是用來檢查和操作變數的type、value和struct。常見用法有檢察 type、調用方法,以及修改變數的value。今天簡單介紹 reflect package的主要功能、使用方法和常見用法。
👨‍💻 簡介 今天的encoding/json package是我日常在開發web時很常用到的package之一,主要是用來將Go struct和 JSON 之間進行轉換。主要功能為資料序列化(marshalling)和反序列化(unmarshalling)。
👨‍💻簡介 要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的timePackage。 今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
👨‍💻 簡介 昨天講到 os package,今天繼續補充 os package底下的 exec package,這個package主要用來執行外部指令和處理指令的輸入和輸出,包括如何設定指令、執行指令以及處理輸出等等。
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
👨‍💻簡介 在 Go 語言中,reflect package是用來檢查和操作變數的type、value和struct。常見用法有檢察 type、調用方法,以及修改變數的value。今天簡單介紹 reflect package的主要功能、使用方法和常見用法。
👨‍💻 簡介 今天的encoding/json package是我日常在開發web時很常用到的package之一,主要是用來將Go struct和 JSON 之間進行轉換。主要功能為資料序列化(marshalling)和反序列化(unmarshalling)。
👨‍💻簡介 要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的timePackage。 今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
還記得那次與公司大老闆一起出差的經歷,我的心情就像坐過山車一樣——既興奮又緊張。作為一名剛入職不久的新人,這無疑是個絕佳的機會,但同時也充滿了挑戰。我深知,一不小心就可能犯錯,給老闆留下糟糕的印象。然而,經過這次寶貴的經驗,我總結出了一些實用的建議,希望能幫助到同樣面臨這種情況的你。 首要的是
Thumbnail
覺得你抗壓力好強,工作一直被念但還是努力工作。 今天收到了一個意外的鼓勵,朋友說:「你抗壓力真強,工作老是被念,但你還是那麼努力。」聽到這句話,心裡一陣溫暖。然而,在這之前,我剛因為工作上的一個小錯誤而被主管批評。事情是這樣的,我在檢查數值時,沒有發現它超出了規格。對於這樣一個「簡單的小事」,
Thumbnail
在 TikTok 上提升影片曝光率不僅需創意,還需有效的 SEO 策略。透過使用工具如 Answer The Public 找到熱門問題,運用五個W(Who、What、When、Where、Why)內容創作法,保持真實性以及合理運用關鍵字和影片編輯技巧,顯著提升內容可見性,吸引更多觀眾並長期成功。
Thumbnail
今天要來和大家分享亡靈節活動體驗,以及Pokémon GO City Safari即將在台南舉辦的購票資訊。
Thumbnail
👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。
少子化以後,後段高中職的身障生逐年增加,甚至全校的有照身障生,還來到了總學生數的六分之一。可是學生增加了以後,相關的特教人力與資源卻沒有跟著增加。許多第一線的老師也沒有特教觀念,分不清楚身障生與一班生的差異,甚至有只要好手好腳會講話就不算身障生的迷思,史的全校一百多個學生,只能靠著人力缺乏的輔導室給
Thumbnail
有多種情況下我們需要從API取消請求: 如果我們正在建立一個支付系統,並且請求一直進行,但使用者希望立即取消這筆訂單。這就是為什麼開發者會建立這個功能的原因。 從電子商務購買商品。使用者意外關閉了頁面,無法立即返回上一頁。 訂閱取消。 ......等等 這將對對這個系統沒有信心的使用者產生影響。因
Thumbnail
留白是網站設計中被廣泛應用的手法。我們常常認為安靜、空的、無色的東西是無聊的,卻鮮少人了解到正因為這些空白的存在,才會成為有聲、有物、有色的對比基礎。網站設計中,很多人認為任何留白都是浪費空間,應該要讓大家看到越多內容越好。但事實上,留白是非常強大的視覺設計技巧,適當的留白甚至與好的內容同等重要。
Thumbnail
 近期有計畫到杭州旅遊的台灣朋友們,跟大家分享一個好消息! 【杭州蕭山機場】已經有開放【台胞證】入境自助通關囉! 以後不用再到人工邊檢排隊排到落落長,排到快抓狂了… 雖然之前就有聽說過北京、上海、廈門、深圳、珠海等沿海大城市都已經開放,直到幾天前剛從台灣飛到杭州才知道…
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
還記得那次與公司大老闆一起出差的經歷,我的心情就像坐過山車一樣——既興奮又緊張。作為一名剛入職不久的新人,這無疑是個絕佳的機會,但同時也充滿了挑戰。我深知,一不小心就可能犯錯,給老闆留下糟糕的印象。然而,經過這次寶貴的經驗,我總結出了一些實用的建議,希望能幫助到同樣面臨這種情況的你。 首要的是
Thumbnail
覺得你抗壓力好強,工作一直被念但還是努力工作。 今天收到了一個意外的鼓勵,朋友說:「你抗壓力真強,工作老是被念,但你還是那麼努力。」聽到這句話,心裡一陣溫暖。然而,在這之前,我剛因為工作上的一個小錯誤而被主管批評。事情是這樣的,我在檢查數值時,沒有發現它超出了規格。對於這樣一個「簡單的小事」,
Thumbnail
在 TikTok 上提升影片曝光率不僅需創意,還需有效的 SEO 策略。透過使用工具如 Answer The Public 找到熱門問題,運用五個W(Who、What、When、Where、Why)內容創作法,保持真實性以及合理運用關鍵字和影片編輯技巧,顯著提升內容可見性,吸引更多觀眾並長期成功。
Thumbnail
今天要來和大家分享亡靈節活動體驗,以及Pokémon GO City Safari即將在台南舉辦的購票資訊。
Thumbnail
👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。
少子化以後,後段高中職的身障生逐年增加,甚至全校的有照身障生,還來到了總學生數的六分之一。可是學生增加了以後,相關的特教人力與資源卻沒有跟著增加。許多第一線的老師也沒有特教觀念,分不清楚身障生與一班生的差異,甚至有只要好手好腳會講話就不算身障生的迷思,史的全校一百多個學生,只能靠著人力缺乏的輔導室給
Thumbnail
有多種情況下我們需要從API取消請求: 如果我們正在建立一個支付系統,並且請求一直進行,但使用者希望立即取消這筆訂單。這就是為什麼開發者會建立這個功能的原因。 從電子商務購買商品。使用者意外關閉了頁面,無法立即返回上一頁。 訂閱取消。 ......等等 這將對對這個系統沒有信心的使用者產生影響。因
Thumbnail
留白是網站設計中被廣泛應用的手法。我們常常認為安靜、空的、無色的東西是無聊的,卻鮮少人了解到正因為這些空白的存在,才會成為有聲、有物、有色的對比基礎。網站設計中,很多人認為任何留白都是浪費空間,應該要讓大家看到越多內容越好。但事實上,留白是非常強大的視覺設計技巧,適當的留白甚至與好的內容同等重要。
Thumbnail
 近期有計畫到杭州旅遊的台灣朋友們,跟大家分享一個好消息! 【杭州蕭山機場】已經有開放【台胞證】入境自助通關囉! 以後不用再到人工邊檢排隊排到落落長,排到快抓狂了… 雖然之前就有聽說過北京、上海、廈門、深圳、珠海等沿海大城市都已經開放,直到幾天前剛從台灣飛到杭州才知道…