项目地址:https://github.com/huandu/xstringsgit
xstrings
是一个很简单的 Go 语言库,简单说就是提供了一些标准库 strings
没提供但依然颇有用的字符串算法。每一个字符串算法都对效率进行了优化,全部函数均可以作到不超过 O(n)
的复杂度,而且尽可能节省内存使用,仅在须要分配内存的时候分配。github
如今实现的算法几乎都是其余语言(主要是 Python/Ruby/PHP/Perl)标准库里提供的算法,用 Go 从新实现一遍。将来也许我还会继续加入更多的方法,不过我不但愿这个库成为一个算法大杂烩,所以仅仅会考虑那些特别有名且语言无关的函数。算法
Go 的 strings
操做字符串的时候都是以 rune
为单位进行,但 string
类型却只能以 byte
为单位进行下标访问,要想使用 rune
就得用 []rune(str)
进行转换(有额外内存分配)或者 utf8. DecodeRuneInString(str)
一个个解码。为了和标准库保持高度统一,xstrings
也彻底以 rune
为单位操做字符串,这使得算法的实现难度比其余语言稍高一点,不过总之都搞定了,这种有一点挑战的感受很不错。٩( 'ω' )و函数
作这个项目有两方面缘由。优化
一方面是由于 Go 的 strings
自带算法实在太少,其余语言里面一些特别有趣的字符串算法,好比 Ruby 的 String#succ
/String#tr
在 Go 里面都没有,网上甚至都搜不到有人实现过,因此干脆本身来实现一个。code
另外一方面则是由于 Go 语言的命名风格比较另类,或者说没有什么历史包袱,在其余语言都被 C 语言遗毒深深困扰的时候,Go 采用了一种小清新的风格命名函数,读起来很舒服,只是从其余语言过来的人要想凭感受找到某特定函数时会略微有些纠结,好比谁能想到 stricmp
在 Go 里面居然叫作 EqualFold
呢。因此我就干脆写一个函数对应表,把 Go 的 strings
函数和其余语言相似函数对应起来,也许有朝一日可以帮到些许新晋 Go 开发者吧。内存