7.Golang字符串操作

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中的oldnew绪抛,如果old為空則在s中的每個字符間插入new包括首尾,n為替換次數电禀, -1 時替換所有
EqualFold(s, t string) bool 忽略大小寫比較字符串st幢码,相同返回 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."
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末矮慕,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子啄骇,更是在濱河造成了極大的恐慌痴鳄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缸夹,死亡現場離奇詭異痪寻,居然都是意外死亡,警方通過查閱死者的電腦和手機虽惭,發(fā)現死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門橡类,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芽唇,你說我怎么就攤上這事顾画。” “怎么了匆笤?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵研侣,是天一觀的道長。 經常有香客問我炮捧,道長庶诡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任咆课,我火速辦了婚禮灌砖,結果婚禮上,老公的妹妹穿的比我還像新娘傀蚌。我一直安慰自己基显,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布善炫。 她就那樣靜靜地躺著撩幽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窜醉,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天宪萄,我揣著相機與錄音,去河邊找鬼榨惰。 笑死拜英,一個胖子當著我的面吹牛,可吹牛的內容都是我干的琅催。 我是一名探鬼主播居凶,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藤抡!你這毒婦竟也來了侠碧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤缠黍,失蹤者是張志新(化名)和其女友劉穎弄兜,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體瓷式,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡替饿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了贸典。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片视卢。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瓤漏,靈堂內的尸體忽然破棺而出腾夯,到底是詐尸還是另有隱情颊埃,我是刑警寧澤蔬充,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站班利,受9級特大地震影響饥漫,放射性物質發(fā)生泄漏。R本人自食惡果不足惜罗标,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一庸队、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闯割,春花似錦彻消、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春煌贴,著一層夾襖步出監(jiān)牢的瞬間御板,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工牛郑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怠肋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓淹朋,卻偏偏與公主長得像笙各,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瑞你,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容

  • 前言 最先接觸編程的知識是在大學里面者甲,大學里面學了一些基礎的知識春感,c語言,java語言虏缸,單片機的匯編語言等鲫懒;大學畢...
    oceanfive閱讀 3,068評論 0 7
  • 生成MD5字符串 生成UUID 方法一、自己寫 方法二刽辙、 方法三窥岩、 方法四、 若使用的是linux系統(tǒng)宰缤,可以直接使...
    吃貓的魚0閱讀 3,455評論 0 1
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)颂翼,也就是一...
    悟名先生閱讀 4,148評論 0 13
  • 一、當前創(chuàng)客教育在校內開展的主要形式有哪些慨灭? 結合本校師資朦乏、課程等實際情況,把創(chuàng)客教育納入日常教學氧骤,激發(fā)學生的創(chuàng)新...
    0102_張曉君閱讀 574評論 0 0
  • 《七絕》秋 一夜風聲知暑盡呻疹, 庭前葉砌著秋涼。 從今不戀春花美筹陵, 月下閑敲桂子香刽锤。
    不語不問閱讀 712評論 0 5