欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串多个范围替换

程序员文章站 2022-07-15 09:33:53
...

多个范围替换字符串

如以下图:

字符串多个范围替换

需求:

当点击发布的时候 输入的内容 要转换以下格式,@name 要用标签括起来如下:

哈哈哈哈哈<@>@乌索普</@>激动激动金额姐姐kkk<@>@乌索普</@>

注:以上那样做是为了防止假@ 用于服务器辨认真@和假艾特

以下代码只是部分替换艾特

  • 定义以下属性

@property(nonatomic, strong)NSMutableDictionary *backupAiteRangeDict;  //备份提交发布主题的时候用来替换aiteRangeDict此字典中的aite

@property(nonatomic, strong)NSMutableArray *rangeArrayM;  //艾特人的range 数组 用来设置高亮显示的
  • 替换高亮艾特文本
//替换高亮文字艾特内容
- (NSString *)replaceLightTxtWithAiteLabel:(NSString *)content
{
    if (self.rangeArrayM.count) {
        NSMutableArray *subStrArray = [NSMutableArray array];

        for (int i = 0; i < self.rangeArrayM.count; i++) {

            NSString *rangeStr = self.rangeArrayM[i];

            NSString *aiteNameStr = self.backupAiteRangeDict[rangeStr];

            NSString *aiteLabelStr = [content stringByReplacingCharactersInRange:NSRangeFromString(rangeStr) withString:aiteNameStr];

            //查找标记所在的范围
            NSRange range = [aiteLabelStr rangeOfString:@"</@>"];

            if (i == 0) {
                //截取标记所在的范围
                NSString *subSign = [aiteLabelStr substringToIndex:(range.location + range.length)];

                [subStrArray addObject:subSign];
            }else{
                //上一个范围
                NSString *beforeRangeStr = self.rangeArrayM[i-1];
                NSRange beforeRange = NSRangeFromString(beforeRangeStr);

                //截取标记所在的范围
                NSString *subSign = [aiteLabelStr substringWithRange:NSMakeRange(beforeRange.location + beforeRange.length, range.location + range.length - (beforeRange.location + beforeRange.length))];

                [subStrArray addObject:subSign];
            }
        }

        return [subStrArray componentsJoinedByString:@""];
    }else{
        return content;
    }

}