go语言中strings包的用法汇总

2019-11-10 12:13:36于丽

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("%qn", us) // "ABCDEF,ABCDEF。"
 ls := strings.ToLowerSpecial(_MyCase, s)
 fmt.Printf("%qn", ls) // "abcdef,abcdef。"
 ts := strings.ToTitleSpecial(_MyCase, s)
 fmt.Printf("%qn", ts) // "ABCDEF,ABCDEF."
}

------------------------------------------------------------

// Title 将 s 中的所有单词的首字母修改为其 Title 格式
// BUG: Title 规则不能正确处理 Unicode 标点符号
func Title(s string) string
func main() {
 s := "heLLo worLd"
 ts := strings.Title(s)
 fmt.Printf("%qn", ts) // "HeLLo WorLd"
}

------------------------------------------------------------

// TrimLeftFunc 将删除 s 头部连续的满足 f(rune) 的字符
func TrimLeftFunc(s string, f func(rune) bool) string

------------------------------------------------------------

// TrimRightFunc 将删除 s 尾部连续的满足 f(rune) 的字符
func TrimRightFunc(s string, f func(rune) bool) string
func isSlash(r rune) bool {
 return r == '' || r == '/'
}

func main() {
 s := "HostNameCWindows"
 ts := strings.TrimRightFunc(s, isSlash)
 fmt.Printf("%qn", ts) // "HostNameCWindows"
}

------------------------------------------------------------

// TrimFunc 将删除 s 首尾连续的满足 f(rune) 的字符
func TrimFunc(s string, f func(rune) bool) string

func isSlash(r rune) bool {
    return r == '' || r == '/'
}
func main() {
    s := "HostNameCWindows"
    ts := strings.TrimFunc(s, isSlash)
    fmt.Printf("%qn", ts) // "HostNameCWindows"
}

------------------------------------------------------------

// 返回 s 中第一个满足 f(rune) 的字符的字节位置。
// 如果没有满足 f(rune) 的字符,则返回 -1
func IndexFunc(s string, f func(rune) bool) int