zoukankan      html  css  js  c++  java
  • 类抖音#话题发布视频功能开发 字符串检索标签(#开头特殊字符结尾) iOS

    需求:

    将随机字符串(用户手动输入的),例如 @"#好的话的哈哈 #哈哈哈,和大河 #很多哈哈的&#开导开导可#好的话的哈哈呵呵呵 #可控####123"

    检索出以 @"#" 开头,以 @"~@#¥$%&×-=+·_+~*÷   ,。、;!‘’【】、《》?:“”「」|()……——   ,./;'[] \ <>?:"{}|!()…—    " 结尾的标签;

     

    类抖音将话题标为黄色,话题标签位置和长度已经标出,富文本功能很简单,本篇不再多加赘述。

     

    代码

        NSString *allStr = @"#好的话的哈哈 #哈哈哈,和大河 #很多哈哈的&#开导开导可#好的话的哈哈呵呵呵 #可控####123";
        NSString *startStr = @"#";
        NSString *endStr = @"~@#¥$%&×-=+·_+~*÷   ,。、;!‘’【】、《》?:“”「」|()……——   ,./;'[] \ <>?:"{}|!()…—    ";
        
        NSMutableArray *subStrArray =  [[NSMutableArray alloc] init];
        int start = 0;
        int end = 0;
        BOOL isStart = NO;
        NSString *subStr = @"";
        for (int i=1; i<allStr.length; i++) {
            NSString *curStr = [allStr substringWithRange:NSMakeRange(i, 1)];
            NSString *preStr = [allStr substringWithRange:NSMakeRange(i-1, 1)];
            if (!isStart) {
                if (![endStr containsString:curStr] && [startStr containsString:preStr]) {
                    isStart = YES;
                    start = i-1;
                    end = i-1;
                    continue;
                }
            }
            
            if ([endStr containsString:curStr] || i==allStr.length-1) {
                end = i;
            }
            if (end > start && isStart) {
                int length = 0;
                if (end == allStr.length-1 && ![endStr containsString:curStr]) {
                    length = end-start+1;
                } else {
                    length = end-start;
                }
                subStr = [allStr substringWithRange:NSMakeRange(start, length)];
                
                NSMutableDictionary *subStrDic =  [[NSMutableDictionary alloc] init];
                [subStrDic setObject:[NSString stringWithFormat:@"%d",start] forKey:@"start"];
                [subStrDic setObject:[NSString stringWithFormat:@"%d",length] forKey:@"length"];
                [subStrDic setObject:subStr forKey:@"subStr"];
                [subStrArray addObject:subStrDic];
                NSLog(@"%d %d %@",start,end,subStr);
                isStart = NO;
            }
            
        }
        NSLog(@"%@",subStrArray);

    结果:

    2020-12-04 16:10:39.657950+0800 Test[46210:8236403] 0 7 #好的话的哈哈
    2020-12-04 16:10:39.658085+0800 Test[46210:8236403] 8 12 #哈哈哈
    2020-12-04 16:10:39.658255+0800 Test[46210:8236403] 17 23 #很多哈哈的
    2020-12-04 16:10:39.658381+0800 Test[46210:8236403] 24 30 #开导开导可
    2020-12-04 16:10:39.658540+0800 Test[46210:8236403] 30 40 #好的话的哈哈呵呵呵
    2020-12-04 16:10:39.658637+0800 Test[46210:8236403] 41 44 #可控
    2020-12-04 16:10:39.658742+0800 Test[46210:8236403] 47 50 #123
    2020-12-04 16:10:39.658911+0800 Test[46210:8236403] (
            {
            length = 7;
            start = 0;
            subStr = "#U597dU7684U8bddU7684U54c8U54c8";
        },
            {
            length = 4;
            start = 8;
            subStr = "#U54c8U54c8U54c8";
        },
            {
            length = 6;
            start = 17;
            subStr = "#U5f88U591aU54c8U54c8U7684";
        },
            {
            length = 6;
            start = 24;
            subStr = "#U5f00U5bfcU5f00U5bfcU53ef";
        },
            {
            length = 10;
            start = 30;
            subStr = "#U597dU7684U8bddU7684U54c8U54c8U5475U5475U5475";
        },
            {
            length = 3;
            start = 41;
            subStr = "#U53efU63a7";
        },
            {
            length = 4;
            start = 47;
            subStr = "#123";
        }
    )
  • 相关阅读:
    c语言l博客作业04
    【 js 基础 】【 源码学习 】 深浅拷贝
    【 js 片段 】如何组织表单的默认提交?【亲测有效】
    【 js 性能优化】【源码学习】underscore throttle 与 debounce 节流
    【 js 片段 】移动端适配简易步骤
    【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)
    【 js 片段 】点击空白或者页面其他地方,关闭弹框
    【 js 算法类】这么全的数组去重,你怕不怕?
    【 js 工具 】如何使用Git上传本地项目到github?(mac版)
    【 js 工具 】如何在Github Pages搭建自己写的页面?
  • 原文地址:https://www.cnblogs.com/huangzs/p/14086803.html
Copyright © 2011-2022 走看看