Go字符串與正則表達式

字符串

字符串長度

  1. 獲取字符串長度: len()
  2. 注意點:len()函數獲取字符串長度的時候, 獲取的是字節數.一個中文占三個字節
  3. 如果想獲得的是中文個數,需要將字符串轉換為rune類型的切片才行
str1 := "你好"
fmt.Println(len(str1)) // 6

rune1 := []rune(str1)
fmt.Println(len(rune1)) // 2

查找字符串

查找子串在字符串中出現的位置
1.從左至右查找
func IndexByte(s string, c byte) int
func IndexRune(s string, r rune) int
//如果找到了就返回字符在字符串中的位置, 如果沒有找到就會-1
//在返回找到的索引的時候, 如果前面有中文, 那么一個中文按照3個索引計算
func IndexAny(s, chars string) int
// 注意點: 從左至右的查找, 一旦找到了, 就不會繼續查找的
// 查找時不是將第二個參數當做一個整體查找, 是==拆開==來查找, 返回找到的最前面一個值
func Index(s, sep string) int
//注意點: 從左至右的查找, 一旦找到了, 就不會繼續查找的
//查找時會將第二個參數當做一個==整體==查找
func IndexFunc(s string, f func(rune) bool) int
// 注意點: 從左至右的查找, 一旦找到了, 就不會繼續查找的
// IndexFunc方法會將字符串轉換成一個[]rune, 然后遍歷切片,
// 逐個將切片中的元素傳遞給自定義的函數,只要自定義函數返回true就代表找到了
2.從右至左查找
func LastIndex(s, sep string) int
func LastIndexByte(s string, c byte) int
func LastIndexAny(s, chars string) int
func LastIndexFunc(s string, f func(rune) bool) int

字符串包含

func Contains(s, substr string) bool
// 作用: 判斷字符串中是否包含指定的子串
// 如果包含返回true, 如果不包含返回false
func ContainsRune(s string, r rune) bool
// 作用:判斷字符串中是否包含指定的字符
// 如果包含返回true,如果不包含返回false
func ContainsAny(s, chars string) bool
// 作用:判斷字符串中是否包含指定的子串中任意一個字符
// 如果包含返回true,如果不包含返回false
func HasPrefix(s, prefix string) bool
// 作用:判斷字符串是否以指定字符串開頭
func HasSuffix(s, suffix string) bool
// 作用:判斷字符串是否以指定字符串結尾

字符串比較

func Compare(a, b string) int
// 比較兩個字符串
// 如果兩個字符串相等,那么返回0
// 如果兩個字符串不相等
// 第一個字符串 > 第二個字符串 返回 1
// 第一個字符串 < 第二個字符串 返回 -1
str1 := "www.123.com" //0
str2 := "www.321.com" //-1
str2 := "www.111.com" //1
res := strings.Compare(str1, str2)


func EqualFold(s, t string) bool
// 比較兩個字符串是否相等, 相等返回true, 不相等返回false
str1 := "www.123.com"
str2 := "www.123.com"  
res := strings.EqualFold(str1, str2) //true

字符串轉換

//字符串轉換
func ToUpper(s string) string
// 作用:將指定字符串中所有的小寫字母轉換成大寫
// 注意點:會生成一個新的字符串, 不會影響原有的字符串
    str1 := "www.123abc.com"
    str2 := strings.ToUpper(str1)
    fmt.Println(str2) //WWW.123ABC.COM

func ToLower(s string) string
// 作用:將指定字符串中所有的大寫字母轉換成小寫
// 注意點:會生成一個新的字符串, 不會影響原有的字符串

func ToTitle(s string) string
// ToTitle 和 ToUpper 會將小寫轉換為大寫

func ToUpperSpecial(_case unicode.SpecialCase, s string) string
func ToLowerSpecial(_case unicode.SpecialCase, s string) string
func ToTitleSpecial(_case unicode.SpecialCase, s string) string

func Title(s string) string
// 作用: 將單詞的首字母大寫, 單詞之間用空格或者-隔開

字符串拆合

  1. 字符串切割
func Split(s, sep string) []string
// 作用:按照指定字符串切割原有字符串
// 注意點: 切割之后的結果, 不包含指定的字符串
     
func SplitN(s, sep string, n int) []string
// 作用:按照指定字符串切割原有字符串, 切割為指定的份數
// 注意點: 切割之后的結果, 不包含指定的字符串
str1 := "www.123.abc,qwe com"
str2 := strings.SplitN(str1,".", 2)
fmt.Println(str2, len(str2)) //2
    
func SplitAfter(s, sep string) []string
// 作用:按照指定字符串切割原有字符串
// 注意點: 切割之后的結果, 包含指定的字符串

func SplitAfterN(s, sep string, n int) []string
//切割為指定的分數
  1. 按照空格切割字符串
func Fields(s string) []string
// 作用:按照空格切割原有字符串
// 注意點:連續的多個空格會按照一個空格來處理
str2 := strings.Fields(str1)

func FieldsFunc(s string, f func(rune) bool) []string
// 作用: 函數返回true就切割, 返回false就不切割
  1. 字符串合并
func Join(a []string, sep string) string
// 作用:按照指定字符連接切片中的元素

sce1 := []string{"www", "123",  "com"}
str1 := strings.Join(sce1,".") 
fmt.Println(str1)//www.123.com
  1. 重復生成字符串
func Repeat(s string, count int) string
// 作用:將原有字符串重復指定次數后生成一個新的字符串
  1. 替換重復生成字符串
func Replace(s, old, new string, n int) string
// 作用: 將原有字符串中的, 指定字符串替換為新的字符串
// 最后一個參數用于指定替換多少個, 如果傳入-1全部都替換

字符串清理

func Trim(s string, cutset string) string
// 作用:返回字符串前后兩端去掉指定字符串之后的新字符串

func TrimLeft(s string, cutset string) string
func TrimRight(s string, cutset string) string
// TrimLeft 只去除左邊的
// TrimRight 只去除右邊的
     
func TrimFunc(s string, f func(rune) bool) string
// 作用: 去除指定字符
// 注意點: true去除

func TrimSpace(s string) string
// 作用: 去除兩端的空格

func TrimPrefix(s, prefix string) string
func TrimSuffix(s, suffix string) string
// 作用:去除前后綴

正則表達式

  1. 正則表達式是一個特殊的字符串, 用于過濾其它的字符串
//需求:取出字符串中所有的123
//1. 定義一個字符串
str := "www.123abcnmb321div123.com"
//2. 創建一個正則表達式對象
regx, _:= regexp.Compile("321")
//3. 利用正則表達式對象, 匹配指定的字符串
res := regx.FindAllString(str, -1)
fmt.Println(res)

//1.從字符串中提取電話號碼
str1 := "李abc13554499311def江15812345678def"
regx, _ := regexp.Compile("1\\d{10}")//[13554499311 15812345678]
res := regx.FindAllString(str1, -1)
fmt.Println(res)


//2.從字符串中提取郵箱
str1 := "今天天氣很好97606813@qq.cn你吃飯了嗎?linanjiang@it666.com"
regx, err := regexp.Compile("[a-zA-Z0-9_]+@[a-zA-Z0-9]+\\.[a-zA-Z]+")
res := regx.FindAllString(str1, -1)
fmt.Println(res) //[97606813@qq.cn linanjiang@it666.com]
fmt.Println(err) //<nil>

時間和日期

  1. 獲取當前時間:package time
  2. 格式:time.Now()
  3. 格式:now.年月日時分秒的英文
tm := time.Now()
str := fmt.Sprintf("當前時間是: %d-%d-%d %d:%d:%d ", tm.Year(), tm.Month(),
        tm.Day(), tm.Hour(), tm.Minute(), tm.Second())
fmt.Println(str) //當前時間是: 2019-2-7 20:35:1
  1. 時間常量常見的就是配合休眠函數一起使用
for{
    time.Sleep(time.Second)
    //time.Sleep(time.Millisecond * 1000)
    fmt.Println("打印了")
    }
  1. Go中的時間戳是從1970年1月1日開始計算的
  2. Unix:返回當前時間距離1970年1月1日有多少秒
  3. UnixNano:返回當前時間距離1970年1月1日有多少納秒
fmt.Println(time.Now().Unix()) // 1549543386
fmt.Println(time.Now().UnixNano()) // 1549543402102909300

// 創建隨機數種子(一定要保證每次運行隨機因子都不一樣才能真正的生成隨機數)
rand.Seed(time.Now().UnixNano())
//生成隨機數
res := rand.Intn(3)
fmt.Println(res)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容