美文网首页面试宝点
字符串截取 - rangeOfComposedCharacter

字符串截取 - rangeOfComposedCharacter

作者: 一双鱼jn | 来源:发表于2017-10-31 11:06 被阅读110次

    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];
    

    相关文章

      网友评论

        本文标题:字符串截取 - rangeOfComposedCharacter

        本文链接:https://www.haomeiwen.com/subject/omzvpxtx.html