字符串截取 - rangeOfComposedCharacterSequenceAtIndex的使用

rangeOfComposedCharacterSequenceAtIndex

emoji表情

NSString *str = @"😝";
NSLog(@"%lu",str1.length);

>>> 2

emoji表情在字符串中是以2个长度来处理的

当遇到字符串截取时,如果截断位置刚好在emoji表情的中间。此时emoji表情就会出现无法解码。如下面的情况

NSString *str = @"😝";
NSString *subStr = [str substringToIndex:1];

所以这种情况下需要判断所在的位置是否为emoji,判断所在位置是否是emoji表情的中间。可以通过这个方法rangeOfComposedCharacterSequenceAtIndex

这个方法的意思是,将emoji表情视为一个连续的字符串,如果index处于连续的字符串之间,就会返回这个字符串的range。

如下效果

NSString *str1 = @"😝";
NSRange range = [str1 rangeOfComposedCharacterSequenceAtIndex:1];
NSLog(@"loc:%lu, len:%lu",range.location,range.length);

>>> loc:0, len:2
NSString *str1 = @"hello 😝 world";
NSRange range = [str1 rangeOfComposedCharacterSequenceAtIndex:6];
NSLog(@"loc:%lu, len:%lu",range.location,range.length);

>>> loc:6, len:2


NSRange range = [str1 rangeOfComposedCharacterSequenceAtIndex:7];
NSLog(@"loc:%lu, len:%lu",range.location,range.length);

>>> loc:6, len:2

所以,当遇到字符串截取时,可以通过该方法来检测是否会截取断emoji表情。如果刚好截取断emoji表情,可以截取到emoji之前或将emoji也包括在内

NSString *str = @"";
const NSInteger lengthLimit = 100;
NSRange range = [str rangeOfComposedCharacterSequenceAtIndex:lengthLimit];
NSString *subStr = [str substringToIndex:range.location];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,173评论 25 709
  • (原创首发,不得转载) 亲,打听一下甘蔗的吃法? 呵呵,哪头甜先吃哪头呗! 哦。
    财道阅读 2,875评论 5 7
  • 我时常会感谢生活,因为在一条路被堵死的时候,往往等待着我的是另一条更好的路。多年的生活经验告诉我,得失无从计较。我...
    飞行家Leo阅读 1,697评论 0 2
  • 今天是辞旧迎新的一天,也是对去年一年的总结,对来年一个目标的确定。 先说说在2016年的总结。如果不...
    尊重生命向生活致敬段天誉阅读 1,382评论 0 0

友情链接更多精彩内容