zoukankan      html  css  js  c++  java
  • OC字符串处理

    接到一个需求, 现有多个品牌的商品,使用字符串保存已选中的品牌,使用','隔开,可以反选。

    分析问题可知:

    1. 字符串由多个品牌名字组成,由 ',' 隔开。

    2.如果选中的品牌不在字符串内,则拼接到字符串。

    3.如果选中的品牌在字符串内,移除这个品牌。

    子字符串在字符串内的位置有 3 种情况:

    在1.头部 2.在内部 3.在尾部,如果子字符 在内部或尾部,

    我们选择移除 ',子字符串',即左边的连接符和子字符串一起移除。

    代码如下:使用 NSString 的分类来写的。

    /**
     字符串处理,添加 字符串,如果已包含此字符串,将其移除
    
     @param com 要插入或者移除的字符串
     @param se 连接符 seperator
     @return 处理结果
     */
    - (NSString *)addComponet:(NSString *)com with:(NSString *)se {
        
        if (IsStrEmpty(com) || IsStrEmpty(se)) {
            return self;
        }
        
        // 时间 空间 复杂度,另一种思路是用 逗号分割成数组,对数组进行操作
        // 1. NSMaxRange(range) > 0 ? contain : do not contain
        // 1.1 range.location == 0 && NSMaxRange(range) == self.filterParam.brandCode.length  e.g. haier
        // 1.2 range.location == 0 && self.filterParam.brandCode.length > NSMaxRange(range)   e.g. haier,haixin,...
        // 1.3 range.location > 0 && self.filterParam.brandCode.length == NSMaxRange(range)   e.g. ...haixin,haier
        // 1.4 range.location > 0 && self.filterParam.brandCode.length > NSMaxRange(range)    e.g. ...,haier,....
        NSRange range = [self rangeOfString:com];
        if (range.length > 0) {
            
            if((range.location == 0) && (self.length == NSMaxRange(range))) {
                
                return nil;
            } else if((range.location == 0) && (self.length > NSMaxRange(range)))  {
                
                range = NSMakeRange(range.location, range.length + se.length);
                return [self stringByReplacingCharactersInRange:range withString:@""];
            } else  {
                
                range = NSMakeRange(range.location - se.length, range.length + se.length);
                return [self stringByReplacingCharactersInRange:range withString:@""];
            }
        } else {
            
            NSString *suffix = [NSString stringWithFormat:@"%@%@", se, com];
            return [self stringByAppendingString:suffix];
        }
        
        return self;
    }
  • 相关阅读:
    PHP 输出true false
    code::blocks 注释快捷键
    GDAL 网址
    wine qq2011安装
    C++ ACM解题
    C++内存分配秘籍—new,malloc,GlobalAlloc详解(Zhuan)
    grub4dos初级教程-入门篇(Z)
    GDAL 编译(转)
    ubuntu双系统安装
    shapfile格式说明(转)
  • 原文地址:https://www.cnblogs.com/miaocunfa/p/9661651.html
Copyright © 2011-2022 走看看