NSString中的字符数

时间:2014-03-22 18:43:57

标签: ios objective-c unicode nsstring

我需要一种方法来查找NSString中的字符数。我的应用程序的性质需要许多多字符unicode字符,这对length上的NSString方法提出了明显的问题。

从Apple开发者网站复制:

Length  
Returns the number of Unicode characters in the receiver. 
- (NSUInteger)length  
Return Value The number of Unicode characters in the receiver.

我不想要字符数本身,而是要打印字符串时会看到的字符数。我在应用程序中使用的一些字符是数字和带有上划线的字母,即0̄。在unicode中,这用两个单独的unicode字符表示,但是,在打印时,它是一个单独的实体。当找到字符串的长度时,我需要像0这样的字符只计为1,而不是像NSString length方法那样计算。有办法做到这一点吗?感谢。

1 个答案:

答案 0 :(得分:13)

您可以使用。枚举字符串中的字符 NSStringEnumerationByComposedCharacterSequences选项:

NSString *string = @"0̄ ";
__block NSUInteger count = 0;
[string enumerateSubstringsInRange:NSMakeRange(0, [string length])
                           options:NSStringEnumerationByComposedCharacterSequences
                        usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                            count++;
                        }];
NSLog(@"%ld %ld", (long)count, (long)[string length]);
// Output: 3 5

分解后的字符0̄和 表情符号(也存储为两个UTF-16字符 - 一个所谓的“代理对”)被视为一个。