字符串长度

NSString 有一个 length 属性来获取字符数。

NSString *string = @"example";
NSUInteger length = string.length;       // length equals 7

分裂示例一样 ,请记住 NSString 使用 UTF-16来表示字符。长度实际上只是 UTF-16 代码单元的数量。这可以与用户认为的字符不同。

以下是一些可能令人惊讶的案例:

@"é".length == 1   // LATIN SMALL LETTER E WITH ACUTE (U+00E9)
@"é".length == 2   // LATIN SMALL LETTER E (U+0065) + COMBINING ACUTE ACCENT (U+0301)
@"❤️".length == 2  // HEAVY BLACK HEART (U+2764) + VARIATION SELECTOR-16 (U+FE0F)
@"🇮🇹".length == 4  // REGIONAL INDICATOR SYMBOL LETTER I (U+1F1EE) + REGIONAL INDICATOR SYMBOL LETTER T (U+1F1F9)

为了获得用户感知字符的数量,技术上称为“ 字形集群 ”,你必须使用 -enumerateSubstringsInRange:options:usingBlock:迭代字符串并保持计数。这一点在 Nikolai Ruhe 对 Stack Overflow 的回答中得到了证明。