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