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