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

 

posted @ 2018-09-17 13:43  CodeVector  阅读(383)  评论(0编辑  收藏  举报