🏂

Swift4 の String.count を Go でやる

2021/01/16に公開

やりたいこと

家族👨‍👩‍👦‍👦 を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
}
GitHubで編集を提案

Discussion