🏂
Swift4 の String.count を Go でやる
やりたいこと
家族👨👩👦👦
を3文字として数えたい。
String.count
はすごい
Swift4 の 内部でGrapheme Cluster
なるアルゴリズムを使っていて、それによってUnicode文字列の文字数を正確に計算できているらしい。
詳細は Swiftのドキュメント へどうぞ。
swift
print("家族👨👩👧👦".count) // -> 3
utf8.RuneCountInString
では対応できない
Go の 👨👩👧👦
が7文字として数えられてしまう。
go
import "unicode/utf8"
func main() {
print(utf8.RuneCountInString("家族👨👩👧👦")) // -> 9
}
String.count
がやりたい
Go でも Swift4 の github.com/rivo/uniseg を使うとGrapheme Cluster
を利用して文字列を処理できる。
Playgroundでやると こんな感じ になる。
go
import "github.com/rivo/uniseg"
func main() {
print(uniseg.GraphemeClusterCount("家族👨👩👧👦")) // -> 3
}
Discussion