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";
        }
    )
  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/huangzs/p/14086803.html
Copyright © 2011-2022 走看看