截取包含表情符的字符串时,如何获取完整的字符长度?

在截取字符串时,有时我们需要考虑表情符字符,因为不同的表情符字符长度不一样,例如:😁的长度为2。

NSLog(@"length: %ld", @"😁".length);
// 此处输出为:length: 2
NSLog(@"length: %ld", @"👴🏻".length);
// 此处输出为:length: 4

 

因此我们在通过NSRange截取字符串时,我们需要获取到完整的字符长度,例如:abcd😁。

NSString *str = @"abcd😁";
// 如果你只是认为这个字符串长度为5,那你就错了,在执行下面代码时,substring不是你想要的
NSString *substring = [str substringWithRange:NSMakeRange(0, 5)];
NSLog(@"substring: %@", substring);
// 此处输出为:abcd,系统会将错误的表情字符放弃,因为😁占2个字符长度,而你只截取了其中一半的字符

 

那么针对这种问题,我们可以通过以下方法,来获取包含完整表情符的字符长度

NSRange range = [str rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, 5)];
NSLog(@"location: %ld,length:%ld", range.location, range.length);
// 此处输出为:location:0,length:6

 

这里输出的length为包含完整字符的长度:6而不是5

 

posted @ 2021-06-22 14:43  zbblogs  阅读(430)  评论(0编辑  收藏  举报