👨‍💻 簡介

一開始介紹基本資料型別時有稍微提到一點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