本文為轉載,原文:Golang 學習筆記(03)—— 字符串操作

1、Contains
func Contains(s, substr string) bool這個函數(shù)是查找某個字符是否在這個字符串中存在,存在返回true.
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.Contains("chain", "ch"))
fmt.Println(strings.Contains("ch", "chain"))
fmt.Println(strings.Contains("chain", "")) //true
fmt.Println(strings.Contains("", "")) //true 這里要特別注意
fmt.Println(strings.Contains("我是中國人", "我")) //true
}
運行結果:

2、ContainsAny
func ContainsAny(s, chars string) bool這個是查詢字符串中是否包含多個字符.
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.ContainsAny("chain", "b")) // false
fmt.Println(strings.ContainsAny("chain", "c & i")) // true
fmt.Println(strings.ContainsAny("chain", "")) // false
fmt.Println(strings.ContainsAny("", "")) // false
}
運行結果:

3、ContainsRune
func ContainsRune(s string, r rune) bool,這里邊當然是字符串中是否包含rune類型,其中rune類型是utf8.RUneCountString可以完整表示全部Unicode字符的類型
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.ContainsRune("chain", rune('c'))) //true
fmt.Println(strings.ContainsRune("chain", 99)) //true
fmt.Println(strings.Contains("我是中國人", "我")) //true
}
運行結果:

其中99是c的Unicode編碼
4、Count
func Count(s, sep string) int這個的作用就是輸出,在一段字符串中有多少匹配到的字符.
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.Count("chainn", "nn")) //1
fmt.Println(strings.Count("chainn", "n")) //2
fmt.Println(strings.Count("chain", "")) // before & after each rune result:6
}
運行結果:

5、Index
func Index(s, sep string) int 這個函數(shù)是查找字符串,然后返回當前的位置,輸入的都是string類型,然后int的位置信息。
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.Index("chain", "h")) //1
fmt.Println(strings.Index("chainn", "n")) //4
fmt.Println(strings.Index("chainn", "q")) //4
fmt.Println(strings.Index("我是中國人", "中")) // 返回 6
}
}
運行結果:

注意:
index是從0開始計數(shù)的
6、IndexAny
func IndexAny(s, chars string) int這個函數(shù)是一樣的查找,字符串第一次出現(xiàn)的位置,如果不存在就返回-1.
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.IndexAny("chainn", "n")) //4
fmt.Println(strings.IndexAny("我是中國人", "中")) // 在存在返回 6
fmt.Println(strings.IndexAny("我是中國人", "和")) // 在存在返回 -1
}
運行結果:

7、IndexByte
func IndexByte(s string, c byte) int,這個函數(shù)功能還是查找第一次粗線的位置,只不過這次C是byte類型的,查找到返回位置,找不到返回-1。
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.IndexByte("hello chain", 'c')) //6
fmt.Println(strings.IndexByte("hello chain", 'b')) //-1
//fmt.Println(strings.IndexAny("我是中國人", "中")) // 編譯報錯
}
運行結果:

8、IndexRune
func IndexRune(s string, r rune) int,還是查找位置,只不過這次是rune類型的。
package main
import "fmt"
import "strings"
func main(){
fmt.Println(strings.IndexRune("chain", rune('c'))) //0
fmt.Println(strings.IndexRune("chain", 's')) // -1
fmt.Println(strings.IndexRune("我是中國人", '中')) //6
}
運行結果:

9、IndexFunc
func IndexFunc(s string, f func(rune) bool) int這個函數(shù)大家一看就知道了,是通過類型的轉換來用函數(shù)查找位置,我們來代碼看下哈。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.IndexFunc("chaina", split)) //2
fmt.Println(strings.IndexFunc("chbin", split)) //-1
}
func split(r rune) bool {
if r == 'a' {
return true
}
return false
}

10、LastIndex
func LastIndex(s, sep string) int 看到這個大家可能也明白了查找的是最后出現(xiàn)的位置,正好跟index相反。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.LastIndex("chaina", "a")) // 5
}
運行結果:

11、LastIndexAny
func LastIndexAny(s, chars string) int這個跟indexAny正好相反,也是查找最后一個
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.LastIndexAny("chaina", "a")) // 5
}
運行結果:

12、EqualFold
func EnqualFold(s string, t string) bool,兩個字符串比較,忽略大小寫,返回bool類型。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.EqualFold("chain", "CHAIN")) // true
fmt.Println(strings.EqualFold("chain", "CHAI")) // false
}
運行結果:

13、Join
func Join(s []string, seq string) string將字符串數(shù)組按照指定的分隔符拼接成字符串。
package main
import "fmt"
import "strings"
func main() {
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", ")) // 返回字符串:foo, bar, baz
}
運行結果:

14、Map
func Map(mapping func(rune)rune, s string) string, 如果mapping方法返回個合法的字符串,改方法返回一個由mapping方法修改過的復制過來的字符串。
package main
import "fmt"
import "strings"
func main() {
rot13 := func(r rune) rune {
switch {
case r >= 'A' && r <= 'Z':
return 'A' + (r-'A'+13)%26
case r >= 'a' && r <= 'z':
return 'a' + (r-'a'+13)%26
}
return r
}
fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher..."))
}
運行結果:

15、Repeat
func Repeat(s string, count int)string,改方法返回一個新的重復指定次數(shù)的字符串。
package main
import "fmt"
import "strings"
func main() {
fmt.Println("ba" + strings.Repeat("na", 2)) //banana
}
運行結果:

16、Replace
func Replace(s, old, new string, count int)string返回一個新的字符串,參數(shù)s是原來的字符串,old是需要被替換掉的字符串,new是要替代old的字符串,count是替換的次數(shù),如果為-1,則為全部替換。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.Replace("oink oink oink", "k", "ky", 5))
fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
fmt.Println(strings.Replace("oink oink oink", "k", "ky", -1))
}
運行結果:

17、Split
func Split(s, seq string)[]string將字符串按照指定的字符串分割生一個字符串數(shù)組。
package main
import "fmt"
import "strings"
func main() {
fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
}
運行結果:

18、SplitN
func SplitN(s, seq string, count int)[]string將字符串按照指定的字符串分割生一個指定元素數(shù)量的字符串數(shù)組。該方法返回的數(shù)組將不保留分隔符。count參數(shù)為-1時效果如Split。
package main
import "fmt"
import "strings"
func main() {
fmt.Printf("%q\n", strings.SplitN("/home/m_ta/src", "/", 1))
fmt.Printf("%q\n", strings.SplitN("/home/m_ta/src", "/", 2))
fmt.Printf("%q\n", strings.SplitN("/home/m_ta/src", "/", -1))
fmt.Printf("%q\n", strings.SplitN("home,m_ta,src", ",", 2))
fmt.Printf("%q\n", strings.SplitN("#home#m_ta#src", "#", -1))
}
運行結果:

19、SplitAfter
func SplitAfter(s, seq string)[]string將字符串按照指定的字符串分割生一個字符串數(shù)組。該方法返回的數(shù)組將保留分隔符,且至于每個元素的末端。
package main
import "fmt"
import "strings"
func main() {
fmt.Printf("%q\n", strings.SplitAfter("/home/m_ta/src", "/")) //["/" "home/" "m_ta/" "src"]
}
運行結果:

20、SplitAfterN
func SplitAfterN(s, seq string, count int)[]string將字符串按照指定的字符串分割生一個指定元素數(shù)量的字符串數(shù)組。該方法返回的數(shù)組將保留分隔符,且至于每個元素的末端。count參數(shù)為-1時效果如SplitAfter。
package main
import "fmt"
import "strings"
func main() {
fmt.Printf("%q\n", strings.SplitAfterN("/home/m_ta/src", "/", 2)) //["/" "home/m_ta/src"]
fmt.Printf("%q\n", strings.SplitAfterN("#home#m_ta#src", "#", -1)) //["/" "home/" "m_ta/" "src"]
}
運行結果:

21、Title
func Title(s string)string該方法返回一個新的字符串,該字符串把原字符串的單詞首字母改為大寫,對中文沒有效果。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.Title("her royal highness"))
fmt.Println(strings.Title("her rOYal highness"))
fmt.Println(strings.Title("我是中國人"))
}
運行結果:

22、ToTitle
func ToTitle(s string)string將字符串轉為大寫字母。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.ToTitle("loud noises"))
fmt.Println(strings.ToTitle("loud 中國"))
}
運行結果:

23、ToLower
func ToLower(s string)string將字符串轉為小寫字母。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.ToLower("CHain")) //chain
}
運行結果:

24、ToUpper
func ToUpper(s string)string將字符串轉為大寫字母。
package main
import "fmt"
import "strings"
func main() {
fmt.Println(strings.ToUpper("Chain"))
}
運行結果:

25、Trim
func Trim(s, cutset string)string去除字符串中首尾指定的字符。
package main
import "fmt"
import "strings"
func main() {
fmt.Println( strings.Trim("!!!Chain!!!", "!"))
}
運行結果:

26、TrimLeft
func TrimLeft(s, cutset string)string去除字符串中左側指定的字符。
package main
import "fmt"
import "strings"
func main() {
fmt.Println( strings.TrimLeft("!!!Chain!!!", "!"))
}
運行結果:

27、TrimSpace
func TrimSpace(s stirng)string去除字符串中首尾的空白部分。
package main
import "fmt"
import "strings"
func main() {
fmt.Println( strings.TrimSpace("\t\n a lone gopher \n\t\r\n"))
}
運行結果:

完
轉載請注明出處:Golang 學習筆記(03)—— 字符串操作
目錄
上一節(jié):Golang 學習筆記(2)—— 函數(shù)
下一節(jié):Golang 學習筆記(04)—— array, slice, map