由于需求要求昵稱最多顯示5個字符,之前寫的代碼是這個
NSString * nick = [nick substringToIndex:kNickMaxLength];
在有emoji表情的昵稱很可能截取出問題契耿,比如這樣的昵稱:“馬致遠(yuǎn)啊??”,其中的“??”的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;
}
}
希望能幫助有需要的朋友碉考。