由于需求要求昵称最多显示5个字符,之前写的代码是这个
NSString * nick = [nick substringToIndex:kNickMaxLength];
在有emoji表情的昵称很可能截取出问题,比如这样的昵称:“马致远啊”,其中的“”的length为2,但是截取的字符串长度为5,猴子只剩一半了。。
显示成了这样:
怎么解决呢?
苹果提供的NSString里面rangeOfComposedCharacterSequenceAtIndex方法
可以遍历每个ComposedCharacterSequence单元,普通字符range的length为1,emoji有的为2,有的为4,将来很可能有其他的值。
所以,截取前几个字符可以这个写:
//截取字符前多少位,处理emoji表情问题
//// + 截取3 =
-(NSString *)subStringWithEmoji:(NSString *)emojiString
limitLength:(NSInteger)limitLength{
if(emojiString.length < limitLength) return emojiString;
@autoreleasepool {
NSString * subStr = emojiString;
NSRange range;
NSInteger index = 0;
for(int i=0; i< emojiString.length; i += range.length){
range = [emojiString rangeOfComposedCharacterSequenceAtIndex:i];
NSString * charrrr = [emojiString substringToIndex:range.location + range.length];
index ++;
if(index == limitLength){
subStr = charrrr;
break;
}
}
return subStr;
}
}
希望能帮助有需要的朋友。