1)으로 많은 당신의 문자열) 5 구성 문자 시퀀스 (또는 문자 클러스터로 구성된다. unichar
을 NSString
의 length
방법으로 세분화하면 문자열을 메모리에 나타 내기 위해 숫자가 unichar
인 7이됩니다.
2) 분명히 UITextField
과 UITextView
은 한마디로 정교한 방법으로 문자열을 처리합니다. 좋은 소식, 너도 할 수있어. # 3 참조.
3) 구성된 문자 시퀀스를 제대로 처리하는 NSString
API를 사용하면 구성된 문자 시퀀스의 수를 얻을 수 있습니다. I가 구운 빠른 예는 매우 빠르게, 작은 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"
짐작하면 문자 인코딩 - NSString이 바이트 수와 문자 수를 비교합니까? 아마도 2 자의 문자가 실제로 멀티 바이트 문자이고 NSString이 위로 이동합니다 ... 문자 그대로 – AndrewP
(# ゚ Д ゚)은 텍스트 편집기에서 복사하여 붙여 넣으면 7자를가집니다. – Bahamut
끝 부분에 공백이 있으므로 "6 자"처럼 보입니다. 그러나 "Д ゚"는 실제로 유니 코드의 두 문자입니다. – borrrden