我需要一种方法来查找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
方法那样计算。有办法做到这一点吗?感谢。
答案 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字符 - 一个所谓的“代理对”)被视为一个。