1)コメントの多くがすでに述べているように、文字列は5つの構成された文字シーケンス(または必要に応じて文字クラスター)で構成されています。のメソッドunichar
のように s で分解すると、メモリ内の文字列を表すのに必要な sの数である 7 が得られます。NSString
length
unichar
2)どうやらUITextField
とUITextView
は unichar に精通した方法で文字列を処理しています。良いニュースです。あなたもできます。#3を参照してください。
3)NSString
合成された文字シーケンスを適切に処理する APIの一部を使用して、合成された文字シーケンスの数を取得できます。私が非常に簡単に作り上げた簡単な例は、小さなNSString
カテゴリです。
@implementation NSString (ComposedCharacterSequences_helper)
-(NSUInteger)numberOfComposedCharacterSequences{
__block NSUInteger count = 0;
[self enumerateSubstringsInRange:NSMakeRange(0, self.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){
NSLog(@"%@",substring); // Just for fun
count++;
}];
return count;
}
@end
これも簡単なコードです。しかし、それはあなたが始める必要があります。そして、次のように使用する場合:
NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);
望ましい結果が得られることがわかります。
NSString
APIの詳細な説明については、WWDC 2012 Session 215 Video "Text and Linguistic Analysis"