返回介绍

04.5.3 关于字符串处理的包

发布于 2024-08-14 12:50:32 字数 9900 浏览 0 评论 0 收藏 0

Go在strings包里面提供了很多操作UTF-8字符串的强大工具,大部分的工具将会在useStrings.go介绍,与文件IO相关的 操作将会在第8章详细介绍。

useStrings.go的第一部分代码:

> package main
> 
> import (
>    "fmt"
>    s "strings"
>    "unicode"
> )
> 
> var f = fmt.Printf

s "strings"的导包方式是非常推荐的,意味着我们给strings包起了一个简短的包名,这样就可以使用s.FunctionName()而不必使用strings.FunctionName()

当你频繁使用某个包中的函数的时候,也可以将该函数赋值给一个变量,像上面的代码一样,var f = fmt.Printf,接下来就可以用f代替fmt.Printf()。要注意的是不要过度使用该特性,不然你的代码可读性会变得很差。

第二部分代码:

> unc main() {
>    upper := s.ToUpper("Hello there!")
>    f("To Upper: %s\n", upper)
>    f("To Lower: %s\n", s.ToLower("Hello THERE"))
> 
>    f("%s\n", s.Title("tHis wiLL be A title!"))
> 
>    f("EqualFold: %v\n", s.EqualFold("Mihalis", "MIHAlis"))
>    f("EqualFold: %v\n", s.EqualFold("Mihalis", "MIHAli"))

这段代码提供了很多玩转字符串的例子,strings.EqualFold()函数能够判断两个字符串是否相同。

第三部分代码:

> f("Prefix: %v\n", s.HasPrefix("Mihalis", "Mi"))
> f("Prefix: %v\n", s.HasPrefix("Mihalis", "mi"))
> f("Suffix: %v\n", s.HasSuffix("Mihalis", "is"))
> f("Suffix: %v\n", s.HasSuffix("Mihalis", "IS"))
> 
> f("Index: %v\n", s.Index("Mihalis", "ha"))
> f("Index: %v\n", s.Index("Mihalis", "Ha"))
> f("Count: %v\n", s.Count("Mihalis", "i"))
> f("Count: %v\n", s.Count("Mihalis", "I"))
> f("Repeat: %s\n", s.Repeat("ab", 5))
> 
> f("TrimSpace: %s\n", s.TrimSpace(" \tThis is a line. \n"))
> f("TrimLeft: %s", s.TrimLeft(" \tThis is a\t line. \n", "\n\t "))
> f("TrimRight: %s\n", s.TrimRight(" \tThis is a\t line. \n", "\n\t "))

strings.Count()函数能够计算第二个参数(字符串类型),在第一个参数(字符串类型)中出现的次数;strings.HasPrefix()函数判断字符串是否是以某字符串开头,如果是的话便返回true;同样,strings.HasSuffix()判断字符串是否以某字符串结尾。

第四部分代码:

> f("Compare: %v\n", s.Compare("Mihalis", "MIHALIS"))
> f("Compare: %v\n", s.Compare("Mihalis", "Mihalis"))
> f("Compare: %v\n", s.Compare("MIHALIS", "MIHalis"))
> 
> f("Fields: %v\n", s.Fields("This is a string!"))
> f("Fields: %v\n", s.Fields("Thisis\na\tstring!"))
> 
> f("%s\n", s.Split("abcd efg", ""))
> f("%s\n", s.Replace("abcd efg", "", "_", -1))
> f("%s\n", s.Replace("abcd efg", "", "_", 4))
> f("%s\n", s.Replace("abcd efg", "", "_", 2))

这部分展示了strings比较高级的一些函数。strings.Split()能够以特定字符分割字符串,并返回一个字符串切片

strings.Compare()函数用于比较两个字符串是否相等,相等返回true,否则返回1或者-1(strings.Compare(a,b),如果ab,意思是出现在字母表中的顺序,译者加)。

strings.Fields()按照空格将字符串分割。

strings.Split()非常有用,你迟早会在自己的程序中用到它!

最后一部分代码:

> lines := []string{"Line 1", "Line 2", "Line 3"}
>    f("Join: %s\n", s.Join(lines, "+++"))
> 
>    f("SplitAfter: %s\n", s.SplitAfter("123++432++", "++"))
> 
>    trimFunction := func(c rune) bool {
>       return !unicode.IsLetter(c)
>    }
>    f("TrimFunc: %s\n", s.TrimFunc("123 abc ABC \t .", trimFunction))
> }

最后一部分代码提供的方法非常好理解,而且功能强大:

strings.Replace()函数需要4个参数,第一个是你要处理的字符串,第二个是你准备替换的字符,第三个是你要用该字符去替换,第四个参数是你要替换的数量,如果是-1就意味着你会替换所有要替换的字符。

strings.TrimFunc()函数可按照自定义函数获取你感兴趣的内容;

strings.SplitAfter()函数基于指定分隔符将字符串分割。

执行useStrings.go的输出如下:

$ go run useStrings.go

To Upper: HELLO THERE!
To Lower: hello there
THis WiLL Be A Title!
EqualFold: true
EqualFold: false
Prefix: true
Prefix: false
Suffix: true
Suffix: false
Index: 2
Index: -1
Count: 2
Count: 0
Repeat: ababababab
TrimSpace: This is a line.
TrimLeft: This is a      line. 
TrimRight:      This is a        line.
Compare: 1
Compare: 0
Compare: -1
Fields: [This is a string!]
Fields: [Thisis a string!]
[a b c d   e f g]
_a_b_c_d_ _e_f_g_
_a_b_c_d efg
_a_bcd efg
Join: Line 1+++Line 2+++Line 3
SplitAfter: [123++ 432++ ]
TrimFunc: abc ABC

官方strings包中的方法远比useStrings.go中所展示的多,如果你正在写的代码是关于文本处理的,那么你应该阅读]strings的官方文档以了解更多。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文