美文网首页
7.Golang字符串操作

7.Golang字符串操作

作者: 野尘lxw | 来源:发表于2018-11-15 00:01 被阅读0次

    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 以连续的空白字符为分隔符,将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中的所有字符修改为其大写格式,优先使用c中的规则进行转换
    ToLowerSpecial(c unicode.SpecialCase, s string) string 将字符串s中的所有字符修改为其小写格式,优先使用c中的规则进行转换
    ToTitleSpecial(c unicode.SpecialCase, s string) string 将字符串s中的所有字符修改为其Title格式,优先使用c中的规则进行转换
    Title(s string) string 将字符串s中的所有单词的首字母修改为其Title格式(BUG: Title 规则不能正确处理 Unicode 标点符号)
    TrimLeftFunc(s string, f func(rune) bool) string 删除字符串s左边连续满足f(rune)的字符
    TrimRightFunc(s string, f func(rune) bool) string 删除字符串s右边连续满足f(rune)的字符
    TrimFunc(s string, f func(rune) bool) string 删除字符串s左右两边连续满足f(rune)的字符
    IndexFunc(s string, f func(rune) bool) int 查找字符串s中第一个满足f(rune)的字符的字节位置,没有返回 -1
    LastIndexFunc(s string, f func(rune) bool) int 查找字符串s中最后一个满足f(rune)的字符的字节位置,没有返回 -1
    Trim(s string, cutset string) string 删除字符串s左右两边连续包含cutset的字符
    TrimLeft(s string, cutset string) string 删除字符串s左边连续包含cutset的字符
    TrimRight(s string, cutset string) string 删除字符串s右边连续包含cutset的字符
    TrimSpace(s string) string 删除字符串s左右两边连续的空白字符
    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. 大小写规则转换
    strings.ToUpperSpecial:将字符串s中的所有字符修改为其大写格式,优先使用c中的规则进行转换
    strings.ToLowerSpecial:将字符串s中的所有字符修改为其小写格式,优先使用c中的规则进行转换
    strings.ToTitleSpecial:将字符串s中的所有字符修改为其Title格式,优先使用c中的规则进行转换
    c规则说明,以下列语句为例:
    unicode.CaseRange{'A', 'Z', [unicode.MaxCase]rune{3, -3, 0}}

    • 其中 'A', 'Z' 表示此规则只影响 'A' 到 'Z' 之间的字符。
    • 其中[unicode.MaxCase]rune数组表示:
    • 当使用 ToUpperSpecial 转换时,将字符的 Unicode 编码与第一个元素值(3)相加
    • 当使用 ToLowerSpecial 转换时,将字符的 Unicode 编码与第二个元素值(-3)相加
    • 当使用 ToTitleSpecial 转换时,将字符的 Unicode 编码与第三个元素值(0)相加
    package main
    
    import (
        "fmt"
        "strings"
        "unicode"
    )
    
    func main() {
        // 定义转换规则
        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."
    }
    

    相关文章

      网友评论

          本文标题:7.Golang字符串操作

          本文链接:https://www.haomeiwen.com/subject/xkkjxqtx.html