如果在瀏覽器上做一網(wǎng)站廣告大約需要多少錢(qián)門(mén)戶網(wǎng)站排行榜
本文介紹go語(yǔ)言處理字符串類型的常見(jiàn)函數(shù)。
?## 多行字符串
在 Go 中創(chuàng)建多行字符串非常容易。只需要在你聲明或賦值時(shí)使用 (``) 。
```
str := `This is a
multiline
string.`
```
## 字符串的拼接
```go
// fmt.Sprintf方式拼接字符串
str1 := "abc"
str2 := "def"
str1_2 := fmt.Sprintf("%s%s", str1, str2)
fmt.Printf("str1_2: %s\n", str1_2) //abcdef
// strings.join方式
collectstring1 := strings.Join([]string{"aaa", "bbb", "ccc"}, "-")
fmt.Printf(collectstring1) // aaa-bbb
fmt.Println()
```
## 字符串的類型轉(zhuǎn)換
### 其他類型轉(zhuǎn)換為字符串-formatint
- FormatFloat接受4個(gè)參數(shù),第一個(gè)參數(shù)就是待轉(zhuǎn)換的浮點(diǎn)數(shù),第二個(gè)參數(shù)表示我們希望轉(zhuǎn)換之后得到的格式。一共有'f', 'b', 'e', 'E', 'g', 'G'這幾種格式。
'f' 表示普通模式:(-ddd.dddd)
'b' 表示指數(shù)為二進(jìn)制:(-ddddp±ddd)
'e' 表示十進(jìn)制指數(shù),也就是科學(xué)記數(shù)法的模式:(-d.dddde±dd)
'E' 和'e'一樣,都是科學(xué)記數(shù)法的模式,只不過(guò)字母e大寫(xiě):(-d.ddddE±dd)
'g' 表示指數(shù)很大時(shí)用'e'模式,否則用‘f'模式
'G' 表示指數(shù)很大時(shí)用’E'模式,否則用'f'模式
```go
// int 轉(zhuǎn)化為字符串
var num1 int = 99
str := fmt.Sprintf("%d", num1)
fmt.Printf("str type %T str=%q\n", str, str) // str type string str="99"
var myChar byte = 'h'
str = fmt.Sprintf("%c", myChar)
fmt.Printf("str type %T str=%q\n", str, str) // str type string str="h"
var num2 int = 99
// 轉(zhuǎn)換為2進(jìn)制格式的字符串
str = strconv.FormatInt(int64(num2), 2)
fmt.Printf("str type %T str=%q\n", str, str) //str type string str="1100011"
// 轉(zhuǎn)換為10進(jìn)制格式的字符串
str = strconv.FormatInt(int64(num2), 10)
fmt.Printf("str type %T str=%q\n", str, str) //str type string str="99"
var num3 float32 = 23.2424
// f 表示格式,2表示保留位數(shù),64 表示這個(gè)num3是float32
str = strconv.FormatFloat(float64(num3), 'f', 2, 32)
fmt.Printf("str type %T str=%q\n", str, str) //str type string str="23.24"
var num4 bool = true
str = strconv.FormatBool(num4)
fmt.Printf("str type %T str=%q\n", str, str) //str type string str="true"
var num5 = 99
str = strconv.Itoa(num5)
fmt.Printf("str type %T str=%q\n", str, str) //str type string str="99"
```
### 字符串轉(zhuǎn)換為其他類型-parseint
- 轉(zhuǎn)為int
```go
var str1 string = "99"
// ParseInt返回的是int64
n1, _ := strconv.ParseInt(str1, 10, 0)
fmt.Printf("n1 type %T n1=%v\n", n1, n1) // n1 type int64 n1=99
```
- 轉(zhuǎn)為float
```go
var str2 string = "99.2"
// 2表示保留小數(shù)點(diǎn)位數(shù)
n2, _ := strconv.ParseFloat(str2, 2)
fmt.Printf("n2 type %T n1=%v\n", n2, n2) // n2 type float64 n1=99.2
```
- 換為bool
```go
var str string = "true"
b, _ := strconv.ParseBool(str)
fmt.Printf("b type %T b=%v\n", b, b)
```
## 字符串的比較-compare
語(yǔ)法:
`cmp := strings.Compare(str1, str2)`
cmp等于-1表示str1字典序小于str2,如果str1和str2相等,cmp等于0。如果cmp=1,表示str1字典序大于str2.
```go
// 字符串必須
fmt.Println(strings.Compare("abb", "bbb")) //-1
fmt.Println(strings.Compare("cbb", "bbb")) //1
fmt.Println(strings.Compare("bbb", "bbb")) //0
```
## 查找字符串的字串-index
`var theInd = strings.Index(str, "sub")`
我們可以用Index函數(shù)查找一個(gè)字符串中子串的位置,它會(huì)返回第一次出現(xiàn)的位置,如果不存在返回-1.
`var theLastIdx = strings.LastIndex(str, "last")`
類似的方法是LastIndex,它返回的是出現(xiàn)的最后一個(gè)位置,同樣,如果不存在返回-1.
```
// 字符串查找是第幾個(gè)字符
fmt.Println(strings.Index("yes hello world hello", "hello")) //4,第一次出現(xiàn)的位置,是第4個(gè)字符
fmt.Println(strings.Index("yes hello world hello", "Hello")) //-1 沒(méi)找到
fmt.Println(strings.LastIndex("yes hello world hello", "hello")) //16,最后一次出現(xiàn)的位置,第16個(gè)字符
fmt.Println(strings.LastIndex("yes hello world hello", "Hello")) //-1 沒(méi)找到
```
## 統(tǒng)計(jì)字串的次數(shù)-count/repeat
`strings.Count("abcabcabababc", "abc") `
第一個(gè)參數(shù)是母串,第二個(gè)參數(shù)是子串。如果子串為空,則返回母串的長(zhǎng)度+1.
`repeat := strings.Repeat("abc", 10)`
用Repeat方法來(lái)講字符串重復(fù)指定的次數(shù)
```go
// 字串出現(xiàn)次數(shù)
fmt.Println(strings.Count("abcabcabc", "abc")) //3
fmt.Println(strings.Count("abcabcabc", "abcd")) //0
fmt.Println(strings.Count("abcabcabc", "")) //結(jié)果為字符串長(zhǎng)度加1=10
// 字符串復(fù)制多次
fmt.Println(strings.Repeat("abc", 3)) //abcabcabc
fmt.Println(strings.Repeat("abc", 0)) //空串
fmt.Println(strings.Repeat("abc", 1)) //abc
```
## 字符替換-replace
Replace函數(shù)接收四個(gè)參數(shù),分別是字符串,匹配串和目標(biāo)串,還有替換的次數(shù)。如果小于0,表示全部替換
```
// 字符串替換
fmt.Println(strings.Replace("abcdabcd", "ab", "bb", 1)) //只替換一次,bbcdabcd
fmt.Println(strings.Replace("abcdabcd", "ab", "bb", -1)) //bbcdbbcd
fmt.Println(strings.Replace("abcd ab cd", " ", "", -1)) //去掉空格,結(jié)果為bbcdbbcd
```
## 字符串與切片的轉(zhuǎn)換-split/join/fields
```
// split,字符串轉(zhuǎn)換為slice
fmt.Println(strings.Split("abc,def,xyz", ",")) //["abc","def","xyz"]
// slice切片組合成字符串
slice1 := []string{"abc", "def", "xyz"}
fmt.Println(strings.Join(slice1, ","))//abc,def,xyz
```
`func Fields(s string) []string`
去除 s 字符串的空格符,并且按照空格分割返回 slice
```
fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz "))
// Output:Fields are: ["foo" "bar" "baz"]
```
## 去掉頭尾字符Trim
```go
//去掉頭尾字符串
fmt.Println(strings.Trim("$ab$cd$", "$")) //ab$cd
fmt.Println(strings.TrimRight("$abcd$", "$")) //$abcd
fmt.Println(strings.TrimLeft("$abcd$", "$")) //abcd$
```
## 大小寫(xiě)轉(zhuǎn)換
```go
// 大小寫(xiě)轉(zhuǎn)換
fmt.Println(strings.ToLower("Golang")) //golang
fmt.Println(strings.ToUpper("Golang")) //GOLANG
```
## 判斷是否包含字串-contains
```go
// 判斷包含字串
fmt.Println(strings.Contains("hello world", "hello")) //true
fmt.Println(strings.Contains("hello world", "Hello")) //false
```
## 判斷前綴與后綴---HasPrefix/HasSufix
```go
// 判斷包含前綴與后綴
fmt.Println(strings.HasPrefix("present", "pre")) //true
fmt.Println(strings.HasSuffix("present", "sent")) //true
```
## 產(chǎn)生隨機(jī)字符串
```go
var source = rand.NewSource(time.Now().UnixNano())
fmt.Println("source.Int63():", source.Int63()) //一個(gè)隨機(jī)的int64數(shù),2252798765959001229
```
```go
package main
import (
"fmt"
"math/rand"
"time"
)
/*
產(chǎn)生隨機(jī)數(shù)的方法
*/
var source = rand.NewSource(time.Now().UnixNano())
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
func main() {
// 一個(gè)隨機(jī)的int64數(shù)
fmt.Println("source.Int63():", source.Int63()) //一個(gè)隨機(jī)的int64數(shù),2252798765959001229
fmt.Println("int64(len(charset)):", int64(len(charset))) //62
fmt.Println(source.Int63() % int64(len(charset))) // 小于62位的數(shù)
fmt.Println(RandString(10))
}
func RandString(length int) string {
// 產(chǎn)生length長(zhǎng)度的隨機(jī)串
b := make([]byte, length)
for i := range b {
randInt64 := source.Int63()
b[i] = charset[randInt64%int64(len(charset))]
}
return string(b)
}
```
## 去掉開(kāi)頭或末尾幾個(gè)字符串
```
// 截掉最后6個(gè)字符
podname := "virt-launcher-kvm-xianwei-test-31-nwdg5"
kvmname := podname[:len(podname)-6] //kvm-xianwei-test-31
```