Go 語言對字符串的操作主要集中在 strings
包中弟灼。常見的字符串操作有:
函數 | 作用 |
---|---|
strconv 包: | |
Atoi(s string) (int, error) | 字符串轉整型 |
strings 包: | |
Count(s, substr string) int | 計算子串substr 在字符串s 中出現的次數 |
Compare(a, b string) int | 比較字符串大小 |
Contains(s, substr string) bool | 判斷字符串s 中是否包含子串substr
|
ContainsAny(s, chars string) bool | 判斷字符串s 中是否包含chars 中的某個Unicode字符 |
ContainsRune(s string, r rune) bool | 判斷字符串s 中是否包含rune型值為r 的字符 |
Index(s, substr string) int | 查找子串substr 在字符串s 中第一次出現的位置嘱丢,如果找不到則返回 -1颠蕴,如果substr 為空,則返回 0 |
LastIndex(s, substr string) int | 查找子串substr 在字符串s 中最后出現的位置 |
IndexRune(s string, r rune) int | 查找rune型值為r 的字符在字符串s 中出現的起始位置 |
IndexAny(s, chars string) int | 查找字符串chars 中字符拱绑,在字符串s 中出現的起始位置 |
LastIndexAny(s, chars string) int | 查找字符串s 中出現chars 中字符的最后位置 |
LastIndexByte(s string, c byte) int | 查找byte型字符c 在字符串s 中的位置 |
SplitN(s, sep string, n int) []string | 以字符串sep 為分隔符,將字符串s 切分成n 個子串,結果中不包含sep 本身椭更。如果sep 為空則將s 切分為 Unicode 字符列表,如果s 中沒有sep 子串則整個s 作為切片 []string 中的第一個元素返回蛾魄。參數n 表示最多切出幾個子串虑瀑,s 超出切分大小時湿滓,超出部分不再切分。n 超出切分子串個數時舌狗,返回實際切分子串數叽奥。如果n 為 0,則返回 nil痛侍;如果n 小于 0朝氓,則不限制切分個數,全部切分 |
SplitAfterN(s, sep string, n int) []string | 以字符串sep 為分隔符主届,將字符串s 切分成n 個子串赵哲,結果中包含sep 本身。如果sep 為空則將s 切分為 Unicode 字符列表君丁,如果s 中沒有sep 子串則整個s 作為切片 []string 中的第一個元素返回枫夺。參數n 表示最多切出幾個子串,s 超出切分大小時绘闷,超出部分不再切分橡庞。n 超出切分子串個數時,返回實際切分子串數印蔗。如果n 為 0扒最,則返回 nil;如果n 小于 0华嘹,則不限制切分個數吧趣,全部切分 |
Split(s, sep string) []string | 以字符串sep 為分隔符,將s 切分成多個子串耙厚,結果中不包含sep 本身再菊。如果sep 為空,則將s 切分成 Unicode 字符列表颜曾,如果s 中沒有sep 子串纠拔,則將整個s 作為 []string 的第一個元素返回 |
SplitAfter(s, sep string) []string | 以字符串sep 為分隔符,將s 切分成多個子串泛豪,結果中包含sep 本身稠诲。如果sep 為空則將s 切分為 Unicode 字符列表,如果s 中沒有sep 子串則整個s 作為切片 []string 中的第一個元素返回诡曙。 |
Fields(s string) []string | 以連續(xù)的空白字符為分隔符,將s 切分成多個子串价卤,結果中不包含空白字符本身〈蚕樱空白字符有:\t, \n, \v, \f, \r, '', U+0085 (NEL), U+00A0 (NBSP) 厌处。如果s 中只包含空白字符,則返回一個空切片 |
FieldsFunc(s string, f func(rune) bool) []string | 以一個或多個滿足函數f(rune) 的字符為分隔符缆娃,將s 切分成多個子串,結果中不包含分隔符本身瑰排。如果s 中沒有滿足f(rune) 的字符贯要,則返回一個空切片 |
Join(a []string, sep string) string | 以sep 為拼接符,拼接切片a 中的字符串 |
HasPrefix(s, prefix string) bool | 判斷字符串s 是否以prefix 字符串開頭椭住,是返回 true崇渗,否則返回 false |
HasSuffix(s, suffix string) bool | 判斷字符串s 是否以suffix 字符串結尾,是返回 true函荣,否則返回 false |
Map(f func(rune) rune, s string) string | 將字符串s 中滿足函數f(rune) 的字符替換為f(rune) 的返回值。如果f(rune) 返回負數扳肛,則相應的字符將被刪除 |
Repeat(s string, count int) string | 返回字符串s 重復count 次數后的結果 |
ToUpper(s string) string | 將字符串s 中的小寫字符轉為大寫 |
ToLower(s string) string | 將字符串s 中的大寫字符轉為小寫 |
ToTitle(s string) string | 將字符串s 中的首個單詞轉為Title 形式傻挂,大部分字符的Title 格式就是Upper 格式 |
ToUpperSpecial(c unicode.SpecialCase, s string) string | 將字符串s 中的所有字符修改為其大寫格式,優(yōu)先使用c 中的規(guī)則進行轉換 |
ToLowerSpecial(c unicode.SpecialCase, s string) string | 將字符串s 中的所有字符修改為其小寫格式挖息,優(yōu)先使用c 中的規(guī)則進行轉換 |
ToTitleSpecial(c unicode.SpecialCase, s string) string | 將字符串s 中的所有字符修改為其Title 格式金拒,優(yōu)先使用c 中的規(guī)則進行轉換 |
Title(s string) string | 將字符串s 中的所有單詞的首字母修改為其Title 格式(BUG: Title 規(guī)則不能正確處理 Unicode 標點符號) |
TrimLeftFunc(s string, f func(rune) bool) string | 刪除字符串s 左邊連續(xù)滿足f(rune) 的字符 |
TrimRightFunc(s string, f func(rune) bool) string | 刪除字符串s 右邊連續(xù)滿足f(rune) 的字符 |
TrimFunc(s string, f func(rune) bool) string | 刪除字符串s 左右兩邊連續(xù)滿足f(rune) 的字符 |
IndexFunc(s string, f func(rune) bool) int | 查找字符串s 中第一個滿足f(rune) 的字符的字節(jié)位置,沒有返回 -1 |
LastIndexFunc(s string, f func(rune) bool) int | 查找字符串s 中最后一個滿足f(rune) 的字符的字節(jié)位置套腹,沒有返回 -1 |
Trim(s string, cutset string) string | 刪除字符串s 左右兩邊連續(xù)包含cutset 的字符 |
TrimLeft(s string, cutset string) string | 刪除字符串s 左邊連續(xù)包含cutset 的字符 |
TrimRight(s string, cutset string) string | 刪除字符串s 右邊連續(xù)包含cutset 的字符 |
TrimSpace(s string) string | 刪除字符串s 左右兩邊連續(xù)的空白字符 |
TrimPrefix(s, prefix string) string | 刪除字符串s 頭部的prefix 字符串 |
TrimSuffix(s, suffix string) string | 刪除字符串s 尾部的suffix 字符串 |
Replace(s, old, new string, n int) string | 替換字符串s 中的old 為new 绪抛,如果old 為空則在s 中的每個字符間插入new 包括首尾,n 為替換次數电禀, -1 時替換所有 |
EqualFold(s, t string) bool | 忽略大小寫比較字符串s 和t 幢码,相同返回 true,反之返回 false |
1. 字符串轉數字
strconv.Atoi:
package main
import (
"fmt"
"strconv"
)
func main() {
var str = "111"
i, _ := strconv.Atoi(str)
fmt.Printf("%d\n", i) // 輸出:111
}
2. 大小寫規(guī)則轉換
strings.ToUpperSpecial:將字符串s
中的所有字符修改為其大寫格式尖飞,優(yōu)先使用c
中的規(guī)則進行轉換
strings.ToLowerSpecial:將字符串s
中的所有字符修改為其小寫格式症副,優(yōu)先使用c
中的規(guī)則進行轉換
strings.ToTitleSpecial:將字符串s
中的所有字符修改為其Title
格式,優(yōu)先使用c
中的規(guī)則進行轉換
c
規(guī)則說明政基,以下列語句為例:
unicode.CaseRange{'A', 'Z', [unicode.MaxCase]rune{3, -3, 0}}
- 其中 'A', 'Z' 表示此規(guī)則只影響 'A' 到 'Z' 之間的字符贞铣。
- 其中
[unicode.MaxCase]rune
數組表示: - 當使用 ToUpperSpecial 轉換時,將字符的 Unicode 編碼與第一個元素值(3)相加
- 當使用 ToLowerSpecial 轉換時沮明,將字符的 Unicode 編碼與第二個元素值(-3)相加
- 當使用 ToTitleSpecial 轉換時辕坝,將字符的 Unicode 編碼與第三個元素值(0)相加
package main
import (
"fmt"
"strings"
"unicode"
)
func main() {
// 定義轉換規(guī)則
var _MyCase = unicode.SpecialCase{
// 將半角逗號替換為全角逗號,ToTitle 不處理
unicode.CaseRange{',', ',',
[unicode.MaxCase]rune{'荐健,' - ',', '酱畅,' - ',', 0}},
// 將半角句號替換為全角句號琳袄,ToTitle 不處理
unicode.CaseRange{'.', '.',
[unicode.MaxCase]rune{'。' - '.', '圣贸。' - '.', 0}},
// 將 ABC 分別替換為全角的 ABC挚歧、abc,ToTitle 不處理
unicode.CaseRange{'A', 'C',
[unicode.MaxCase]rune{'A' - 'A', 'a' - 'A', 0}},
}
s := "ABCDEF,abcdef."
us := strings.ToUpperSpecial(_MyCase, s)
fmt.Printf("%q\n", us) // 輸出:"ABCDEF吁峻,ABCDEF滑负。"
ls := strings.ToLowerSpecial(_MyCase, s)
fmt.Printf("%q\n", ls) // 輸出:"abcdef,abcdef用含。"
ts := strings.ToTitleSpecial(_MyCase, s)
fmt.Printf("%q\n", ts) // 輸出:"ABCDEF,ABCDEF."
}