文字列にある Character
値の数を取得するには、文字列の characters
プロパティの count
プロパティを使用します。
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
print("unusualMenagerie has \(unusualMenagerie.characters.count) characters")
// "unusualMenagerie has 40 characters" と出力
Swift における Character
値の拡張書記素クラスタは、文字列の連結および変更による文字列の文字数への影響がありません。
例として、4 文字の単語 cafe
という新しい文字列を初期化し、文字列の最後に COMBINING ACUTE ACCENT
(U+0301
) を付け足した場合、4 番目の文字は e
でなく é
となりますが、文字列の文字数は 4
のままです。
var word = "cafe"
print("the number of characters in \(word) is \(word.characters.count)")
// "the number of characters in cafe is 4" と出力
word += "\u{301}" // COMBINING ACUTE ACCENT, U+0301
print("the number of characters in \(word) is \(word.characters.count)")
// "the number of characters in café is 4" と出力
拡張書記素クラスタは、1 以上の Unicode スカラで構成されます。これは、文字によって(また、同じ文字でも異なる表現によって)保存に必要なメモリ量が異なるということです。このため、文字列の表現内で各文字が同じメモリ量となるわけではありません。結果として、拡張書記素クラスタの境界を特定するために文字列内を繰り返し処理することなく、文字列の文字数を算出することはできません。特に長い文字列の値を扱う場合、characters
プロパティがその文字列の文字を特定するために、文字列全体の Unicode スカラを繰り返し処理する必要があることを知っておいてください。
characters
プロパティによって返される文字数は、同じ文字を含む NSString
の length
プロパティと常に同じにはなりません。NSString
の長さは、文字列の UTF-16 表現内の 16 ビット符号単位の数をベースにしており、文字列内の Unicode 拡張書記素クラスタの数ではありません。
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.