go語言字符串處理包——strings 和 strconv

前綴和後綴

HasPrefix 判斷字符串 s 是否以 prefix 開頭shell

strings.HasPrefix(s, prefix string) bool
複製代碼

HasPrefix 判斷字符串 s 是否以 prefix 開頭bash

strings.HasSuffix(s, suffix string) bool
複製代碼

示例:函數

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "hello world"

	// 前綴
	fmt.Printf("前綴包含 'hello' = %t\n", strings.HasPrefix(str,"hello"))
	fmt.Printf("前綴包含 'world' = %t\n", strings.HasPrefix(str,"world"))
	// 後綴
	fmt.Printf("後綴包含 'ld' = %t\n", strings.HasSuffix(str,"ld"))
}
複製代碼

輸出:ui

前綴包含 'hello' = true
前綴包含 'world' = false
後綴包含 'ld' = true
複製代碼

字符串包含關係

Contains 判斷字符串 s 是否包含 substr編碼

Contains(s, substr string) bool
複製代碼

示例:spa

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "hello world"

	// 判斷包含關係
	fmt.Printf("字符串是否包含 'llo' = %t\n", strings.Contains(str,"llo"))
}
複製代碼

輸出:code

字符串是否包含 'llo' = true
複製代碼

判斷子字符在父字符串中的位置

Index 返回字符串 substr 在字符串 s 中的第一個位置,-1 表示字符串 s 不包含 substrorm

Index(s, substr string) int
複製代碼

LastIndex 返回字符串 substr 在字符串 s 中的最後一個位置, -1 表示字符串 s 不包含 substr字符串

LastIndex(s, substr string) int
複製代碼

若是須要查詢非 ASCII 編碼的字符在父字符串中的位置,建議使用如下函數來對字符進行定位:string

IndexRune(s string, r rune) int
複製代碼

示例:

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "hello world"

	// 判斷字符串所在的位置(第一個位置)
	fmt.Printf("子字符串 'hello' 所在第一個位置 index = %d\n", strings.Index(str,"hello"))

	// 判斷字符串所在的位置(最後一個位置)
	fmt.Printf("子字符串 'l' 所在最後一個位置 index = %d\n", strings.LastIndex(str,"l"))
}
複製代碼

輸出:

子字符串 'hello' 所在第一個位置 index = 0
子字符串 'l' 所在最後一個位置 index = 9
複製代碼

字符串替換

Replace 用於將字符串 s 中的前 n 個字符串 old 替換爲字符串 new,並返回一個新的字符串,若是 n = -1 則替換全部字符串 old 爲字符串 new

Replace(s, old, new string, n int) string
複製代碼

示例:

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "hello world, hello, hello"

	// 字符串替換
	fmt.Printf(" '你好' 替換第1個 'hello' = %s\n",strings.Replace(str,"hello","你好", 1))
	fmt.Printf(" '你好' 替換第2個之前的 'hello' = %s\n",strings.Replace(str,"hello","你好", 2))
	fmt.Printf(" '你好' 替換全部的 'hello' = %s\n",strings.Replace(str,"hello","你好", -1))
}
複製代碼

字符串出現的次數

Count 用於統計字符串 substr 出如今字符串 s 中的沒有重疊的次數

Count(s, substr string) int
複製代碼

示例:

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "hello world, hello, hello"
	var manyH string = "HHHHHHHH"

	// 字符串出現次數
	fmt.Printf(" 'hello' 出現的非重疊次數 = %d\n", strings.Count(str,"hello"))
	fmt.Printf(" 'HH' 出現的非重疊次數 = %d\n", strings.Count(manyH,"HH"))
}
複製代碼

輸出:

'hello' 出現的非重疊次數 = 3
 'HH' 出現的非重疊次數 = 4
複製代碼

重複字符串

Repeat 用於重複 count 次字符串 s 並返回新的字符串

Repeat(s string, count int) string
複製代碼

示例:

package main

import (
   "fmt"
   "strings"
)

func main() {
   // 重複字符串
   var originalStr = "hello"
   fmt.Printf("重複字符串 'hello' 3 次 = %s\n", strings.Repeat(originalStr,3))
}
複製代碼

輸出:

重複字符串 'hello' 3 次 = hellohellohello
複製代碼

修改字符串大小寫

ToLower 將字符串 s 所有轉爲小寫

ToLower(s string) string
複製代碼

ToUpper 將字符串 s 所有轉爲大寫

ToUpper(s string) string
複製代碼

示例:

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "HELLO world"

	// 字符串所有轉爲小寫
	fmt.Printf(" 'HELLO world' 轉爲小寫 = %s\n", strings.ToLower(str))
	// 字符串所有轉爲大寫
	fmt.Printf(" 'HELLO world' 轉爲大寫 = %s\n", strings.ToUpper(str))
}
複製代碼

輸出:

'HELLO world' 轉爲小寫 = hello world
 'HELLO world' 轉爲大寫 = HELLO WORLD
複製代碼

修剪字符串

TrimLeft 用於剔除字符串 s 開頭的字符串 cutset

TrimLeft(s string, cutset string) string
複製代碼

TrimRight 用於剔除字符串 s 末尾的字符串 cutset

TrimRight(s string, cutset string) string
複製代碼

TrimSpace 用於剔除字符串 s 開頭和末尾的空格字符串

TrimSpace(s string) string
複製代碼

Trim 用於剔除掉字符串 s 開頭和末尾的字符串 cutset

Trim(s string, cutset string) string
複製代碼

示例:

package main

import (
	"fmt"
	"strings"
)

func main() {

	var str string = "hello world"

	// 剔除掉開頭的字符串
	fmt.Printf("裁剪掉開頭的字符串 'he' = %s\n", strings.TrimLeft(str,"he"))
	// 剔除掉末尾的字符串
	fmt.Printf("裁剪掉末尾的字符串 'ld' = %s\n", strings.TrimRight(str,"ld"))

	// 剔除掉開頭和末尾的空格字符串
	var cutString string = " he llo "
	fmt.Printf("裁剪掉開頭和末尾的空白字符串 = %s\n", strings.TrimSpace(cutString))

	// 剔除掉開頭和末尾指定的字符串
	var cutString1 string = "shellos"
	fmt.Printf("裁剪掉全部的空格字符串 = %s\n", strings.Trim(cutString1,"s"))
}
複製代碼

輸出:

裁剪掉開頭的字符串 'he' =  hello world
裁剪掉末尾的字符串 'ld' =  hello wor
裁剪掉開頭和末尾的空白字符串 = he  llo
裁剪掉全部的空格字符串 = hello
複製代碼

字符串類型的 slice 與字符串之間的轉換

Fields 將會利用空白符號來做爲分隔符將字符串分割成若干小塊,並返回一個 slice,若是字符串只包含空白符號,則返回一個長度爲 0slice

Fields(s string) []string
複製代碼

Split 用於自定義分割符號 sep 來對指定字符串進行分割,一樣返回 slice

Split(s, sep string) []string
複製代碼

示例:

package main

import (
	"fmt"
	"strings"
)

func main() {

	str := "The quick brown fox jumps over the lazy dog"
	sl := strings.Fields(str)
	fmt.Printf("根據空格分割成 slice:\n")
	fmt.Println(sl)

	fmt.Println()

	str2 := "The-quick-brown-fox-jumps-over-the-lazy-dog"
	sl2 := strings.Split(str2,"-")

	fmt.Printf("根據 '-' 分割成 slice:\n")
	fmt.Println(sl2)

	fmt.Println()

	str3 := strings.Join(sl2,"+")
	fmt.Printf("slice sl2 轉爲字符串以 '+' 鏈接:\n", )
	fmt.Println(str3)



}
複製代碼

輸出:

根據空格分割成 slice:
[The quick brown fox jumps over the lazy dog]

根據 '-' 分割成 slice:
[The quick brown fox jumps over the lazy dog]

slice sl2 轉爲字符串以 '+' 鏈接:
The+quick+brown+fox+jumps+over+the+lazy+dog
複製代碼

字符串與數字類型間的轉換

字符串轉數字

ParseInt 把字符串 s 轉化爲 int64類型

  • base 表示進位制(2 到 36),若是 base 爲 0,則根據字符串前綴判斷,前綴 0x 表示 16 進制,前綴 0 表示 8 進制,不然是 10 進制
  • bitSize 表示結果的位寬(包括符號位),0 表示最大位寬
ParseInt(s string, base int, bitSize int) (i int64, err error)
複製代碼

示例:

package main

import (
	"fmt"
	"strconv"
)

func main() {

	num,error := strconv.ParseInt("11",2,0)
	fmt.Printf("num = %d\n", num)
	fmt.Printf("error = %v\n\n", error)

	num1,error1 := strconv.ParseInt("11",8,0)
	fmt.Printf("num1 = %d\n", num1)
	fmt.Printf("error1 = %v\n\n", error1)

	num2,error2 := strconv.ParseInt("11",10,0)
	fmt.Printf("num2 = %d\n", num2)
	fmt.Printf("error2 = %v\n\n", error2)

	num3,error3 := strconv.ParseInt("11",16,0)
	fmt.Printf("num3 = %d\n", num3)
	fmt.Printf("error3 = %v\n\n", error3)
}
複製代碼

輸出:

num = 3
error = <nil>

num1 = 9
error1 = <nil>

num2 = 11
error2 = <nil>

num3 = 17
error3 = <nil>
複製代碼

ParseUintParseInt 同樣,可是輸出爲正整數

ParseUint(s string, base int, bitSize int) (uint64, error)
複製代碼

Atoi 把字符串 s 轉換爲int類型,並返回 error

Atoi(s string) (int, error)
複製代碼

示例:

package main

import (
	"fmt"
	"strconv"
)

func main() {

	num,error := strconv.Atoi("1")

	fmt.Printf("num = %d\n",num)
	fmt.Println("error = ",error)
}
複製代碼

輸出:

num = 1
error =  <nil>
複製代碼

ParseBool 把字符串 s 轉換爲 bool,並返回 error

ParseBool(str string) (bool, error)
複製代碼

ParseFloat 把字符串 s 轉換爲 float64,並返回 error

  • bitSize 表示結果的位寬(包括符號位),0 表示最大位寬
ParseFloat(s string, bitSize int) (float64, error)
複製代碼

FormatInti 轉換爲 string

  • base 表示進位制(2 到 36)
FormatInt(i int64, base int) string
複製代碼

FormatUintFormatInt 同樣,可是要爲正整數

func FormatUint(i uint64, base int) string 複製代碼

數字轉字符串

FormatUintuint64 轉爲字符串

FormatUint(i uint64, base int) string
複製代碼

FormatIntint64 轉爲字符串

FormatInt(i int64, base int) string
複製代碼

FormatBoolbool 轉爲字符串

FormatBool(b bool) string
複製代碼

FormatFloatfloat64 轉爲字符串

一、f:要轉換的浮點數

二、fmt:格式標記(beEfgG

  • b (-ddddp±ddd,二進制指數)
  • e (-d.dddde±dd,十進制指數)
  • E (-d.ddddE±dd,十進制指數)
  • f (-ddd.dddd,沒有指數)
  • g (e:大指數,f:其它狀況)
  • G (E:大指數,f:其它狀況)
  • 若是格式標記爲 eEf,則 prec 表示小數點後的數字位數
  • 若是格式標記爲 gG,則 prec 表示總的數字位數(整數部分+小數部分)

三、prec:精度(數字部分的長度,不包括指數部分)

四、bitSize:指定浮點類型(32:float3264:float64

FormatFloat(f float64, fmt byte, prec, bitSize int) string
複製代碼

示例:

package main

import (
	"fmt"
	"strconv"
)

func main() {

	f := 200.12345678901234567890123456789
	fmt.Println(strconv.FormatFloat(f, 'b', 5, 32))
	fmt.Println(strconv.FormatFloat(f, 'e', 5, 32))
	fmt.Println(strconv.FormatFloat(f, 'E', 5, 32))
	fmt.Println(strconv.FormatFloat(f, 'f', 5, 32))
	fmt.Println(strconv.FormatFloat(f, 'g', 5, 32))
	fmt.Println(strconv.FormatFloat(f, 'G', 5, 32))
	fmt.Println(strconv.FormatFloat(f, 'b', 30, 32))
	fmt.Println(strconv.FormatFloat(f, 'e', 30, 32))
	fmt.Println(strconv.FormatFloat(f, 'E', 30, 32))
	fmt.Println(strconv.FormatFloat(f, 'f', 30, 32))
	fmt.Println(strconv.FormatFloat(f, 'g', 30, 32))
	fmt.Println(strconv.FormatFloat(f, 'G', 30, 32))
}
複製代碼

輸出:

13115291p-16
2.00123e+02
2.00123E+02
200.12346
200.12
200.12
13115291p-16
2.001234588623046875000000000000e+02
2.001234588623046875000000000000E+02
200.123458862304687500000000000000
200.1234588623046875
200.1234588623046875
複製代碼
相關文章
相關標籤/搜索