Go字符串与正则表达式
2019-02-08 本文已影响0人
无尾树袋熊
字符串
字符串长度
- 获取字符串长度: 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)