字符串
字符串長度
- 獲取字符串長度: len()
- 注意點:len()函數獲取字符串長度的時候, 獲取的是字節數.一個中文占三個字節
- 如果想獲得的是中文個數,需要將字符串轉換為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
// 作用: 將單詞的首字母大寫, 單詞之間用空格或者-隔開
字符串拆合
- 字符串切割
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
//切割為指定的分數
- 按照空格切割字符串
func Fields(s string) []string
// 作用:按照空格切割原有字符串
// 注意點:連續的多個空格會按照一個空格來處理
str2 := strings.Fields(str1)
func FieldsFunc(s string, f func(rune) bool) []string
// 作用: 函數返回true就切割, 返回false就不切割
- 字符串合并
func Join(a []string, sep string) string
// 作用:按照指定字符連接切片中的元素
sce1 := []string{"www", "123", "com"}
str1 := strings.Join(sce1,".")
fmt.Println(str1)//www.123.com
- 重復生成字符串
func Repeat(s string, count int) string
// 作用:將原有字符串重復指定次數后生成一個新的字符串
- 替換重復生成字符串
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
// 作用:去除前后綴
正則表達式
- 正則表達式是一個特殊的字符串, 用于過濾其它的字符串
//需求:取出字符串中所有的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>
時間和日期
- 獲取當前時間:package time
- 格式:time.Now()
- 格式: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
- 時間常量常見的就是配合休眠函數一起使用
for{
time.Sleep(time.Second)
//time.Sleep(time.Millisecond * 1000)
fmt.Println("打印了")
}
- Go中的時間戳是從1970年1月1日開始計算的
- Unix:返回當前時間距離1970年1月1日有多少秒
- 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)