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阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容