Go语言教程之边写边学:基础练习:常用字符串函数(1)

Golang提供了许多内置的字符串函数,它们有助于在处理字符串数据时执行多项操作。Golang字符串函数是核心的一部分。使用此功能无需安装,只需导入"strings"包即可。重要的Golang字符串函数列表如下:


Compare函数:区分大小写

您可以使用Compare() 比较两个字符串。它返回大于零、小于零或等于零的输出。如果字符串1大于字符串2,则返回大于零。如果字符串1小于字符串2,则返回小于零。如果字符串相等,则返回零。

func Compare(a, b string) int

示例代码:

package main

import (
  "fmt"
  "strings"
)

func main() {
  fmt.Println(strings.Compare("A", "B"))  // A < B
  fmt.Println(strings.Compare("B", "A"))  // B > A  
  fmt.Println(strings.Compare("Japan", "Australia"))  // J > A
  fmt.Println(strings.Compare("Australia", "Japan"))  // A < J
  fmt.Println(strings.Compare("Germany", "Germany"))  // G == G
  fmt.Println(strings.Compare("Germany", "GERMANY"))  // GERMANY > Germany
  fmt.Println(strings.Compare("", ""))
  fmt.Println(strings.Compare("", " ")) // Space is less
}

输出:

-1
1
1
-1
0
1
0
-1

 

Contains函数:区分大小写

您可以使用Contains() 搜索字符串中的特定文本/字符串/字符。它返回true或false的输出。如果在字符串2中找到字符串1,则返回true。如果在字符串2中找不到字符串1,则返回false。

func Contains(s, substr string) bool

示例代码:

package main

import (
  "fmt"
  "strings"
)

func main() {
  fmt.Println(strings.ContainsAny("Australia", "a"))
  fmt.Println(strings.ContainsAny("Australia", "r & a"))
  fmt.Println(strings.ContainsAny("JAPAN", "j"))
  fmt.Println(strings.ContainsAny("JAPAN", "J"))
  fmt.Println(strings.ContainsAny("JAPAN", "JAPAN"))  
  fmt.Println(strings.ContainsAny("JAPAN", "japan"))
  fmt.Println(strings.ContainsAny("Shell-12541", "1"))

  //  Contains vs ContainsAny
  fmt.Println(strings.ContainsAny("Shell-12541", "1-2")) // true
  fmt.Println(strings.Contains("Shell-12541", "1-2"))   // false
}

输出:

true
true
false
true
true
false
true
true
false

 

Count函数:区分大小写

此函数计算字符串中字符/字符串/文本的非重叠实例数。

func Count(s, sep string) int

示例代码:

package main

import (
  "fmt"
  "strings"
)

func main() {
  fmt.Println(strings.Count("Australia", "a"))
  fmt.Println(strings.Count("Australia", "A"))
  fmt.Println(strings.Count("Australia", "M"))
  fmt.Println(strings.Count("Japanese", "Japan"))   // 1
  fmt.Println(strings.Count("Japan", "Japanese"))   // 0
  fmt.Println(strings.Count("Shell-25152", "-25"))
  fmt.Println(strings.Count("Shell-25152", "-21"))
  fmt.Println(strings.Count("test", ""))    // length of string + 1
  fmt.Println(strings.Count("test", " "))
}

输出:

2
1
0
1
0
1
0
5
0

 

EqualFold函数:不区分大小写

使用EqualFold,您可以检查两个字符串是否相等。如果两个字符串相等,则返回输出true,如果两个字符串不相等,则返回false。

func EqualFold(s, t string) bool

示例代码:

package main

import (
  "fmt"
  "strings"
)

func main() {
  fmt.Println(strings.EqualFold("Australia", "AUSTRALIA"))
  fmt.Println(strings.EqualFold("Australia", "aUSTRALIA"))
  fmt.Println(strings.EqualFold("Australia", "Australia"))
  fmt.Println(strings.EqualFold("Australia", "Aus"))
  fmt.Println(strings.EqualFold("Australia", "Australia & Japan"))
  fmt.Println(strings.EqualFold("JAPAN-1254", "japan-1254"))  
  fmt.Println(strings.EqualFold(" ", " "))  // single space both side
  fmt.Println(strings.EqualFold(" ", "  "))  // double space right side
}

输出:

true
true
true
false
false
false
true
true
false

 

Fields函数:

Fields函数将一个或多个连续空格字符的每个实例周围的字符串分解为一个Array。

func Fields(s string) []string

示例代码:

package main

import (
  "fmt"
  "strings"
)

func main() {
  testString := "Australia is a country and continent surrounded by the Indian and Pacific oceans."
  testArray := strings.Fields(testString)  
  for _, v := range testArray {    
    fmt.Println(v)
  }
}

输出:

Australia
is
a
country
and
continent
surrounded
by
the
Indian
and
Pacific
oceans

 

FieldsFunc函数

FieldsFunc函数在每次运行满足f(c) 的Unicode码位c时断开字符串s,并返回s切片数组。您可以使用此函数按每个数字点或特殊字符拆分字符串。查看以下两个FieldsFunc示例:

func FieldsFunc(s string, f func(rune) bool) []string

示例代码:

package main

import (
  "fmt"
  "strings"
  "unicode"  
)

func main() {
  // 是否为unicode字母x := func(c rune) bool {
    return !unicode.IsLetter(c)
  }
  strArray := strings.FieldsFunc(`Australia major cities – Sydney, Brisbane,
                                 Melbourne, Perth, Adelaide – are coastal`,x)
  for _, v := range strArray {    
    fmt.Println(v)
  }

  fmt.Println("\n*按数字分割***\n")

  y := func(c rune) bool {
    return unicode.IsNumber(c)
  }
  testArray := strings.FieldsFunc(`1 Sydney Opera House.2 Great Barrier Reef.3 Uluru-Kata Tjuta National Park.4 Sydney Harbour Bridge.5 Blue Mountains National Park.6 Melbourne.7 Bondi Beach`,y)
  for _, w := range testArray {    
    fmt.Println(w)
  }

}

输出:

Australia
major
cities
Sydney
Brisbane
Melbourne
Perth
Adelaide
are
coastal

*按数字分割***

 Sydney Opera House.
 Great Barrier Reef.
 Uluru-Kata Tjuta National Park.
 Sydney Harbour Bridge.
 Blue Mountains National Park.
 Melbourne.
 Bondi Beach