如果我有这样的字符串。
NSString *string = @"1357"
要获得像@"35"
这样的子字符串,您必须考虑笑脸字符需要两个字节的事实。
NSString *substring = [string substringWithRange:NSMakeRange(5, 4)];
在这种情况下,有没有办法通过使用实际字符索引来获取相同的子字符串NSMakeRange(3, 3)
?
答案 0 :(得分:0)
快速扩展NSString并使用新的swift String结构。有一个漂亮的String.Index使用字形来计算字符和范围选择。非常有用的是像你这样的情况,包括表情符号
答案 1 :(得分:0)
感谢@ Joe的链接,我能够创建一个有效的解决方案。
对于只是尝试在NSString的unicode字符范围内创建子字符串,这似乎仍然很多。如果您有更简单的解决方案,请发布。
@implementation NSString (UTF)
- (NSString *)substringWithRangeOfComposedCharacterSequences:(NSRange)range
{
NSUInteger codeUnit = 0;
NSRange result;
NSUInteger start = range.location;
NSUInteger i = 0;
while(i <= start)
{
result = [self rangeOfComposedCharacterSequenceAtIndex:codeUnit];
codeUnit += result.length;
i++;
}
NSRange substringRange;
substringRange.location = result.location;
NSUInteger end = range.location + range.length;
while(i <= end)
{
result = [self rangeOfComposedCharacterSequenceAtIndex:codeUnit];
codeUnit += result.length;
i++;
}
substringRange.length = result.location - substringRange.location;
return [self substringWithRange:substringRange];
}
@end
示例:强>
NSString *string = @"1357";
NSString *result = [string substringWithRangeOfComposedCharacterSequences:NSMakeRange(3, 3)];
NSLog(@"%@", result); // 35