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

分析问题可知:

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 > ) { if((range.location == ) && (self.length == NSMaxRange(range))) { return nil;
} else if((range.location == ) && (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;
}

OC字符串处理的更多相关文章

  1. OC字符串常用函数

    创建一个字符串对象: NSstring * str1 = @"hello"; NSString * str = [[NSString alloc]initWithString:@& ...

  2. OC字符串的常用方法

    网上写的关于字符串常用方法的博客很多,这里我简单做了下总结!不喜勿喷哦! 一.创建字符串 #import <Foundation/Foundation.h> //NSString //创建 ...

  3. c语言字符串转OC字符串

    // 如果把c语言字符串转OC字符串,@(C字符串) char *c = "abc"; NSLog(@"%@", @(c));

  4. OC字符串与C语言字符串之间的相互转换

    1.C转OC字符串 const char *cString = "This is a C string"; // 动态方法 NSString *ocString1 = [[NSSt ...

  5. OC字符串NSString

    ========================== 面向对象编程进阶和字符串 ========================== Δ一.类的设计模式—单例 [单例]程序允许过程中,有且仅有一块内存 ...

  6. oc 字符串

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  7. OC字符串的一些常用的函数。

    )//获取字符串长度 NSUInteger len= str.length; () //通过指定索引返回对应的字符 unichar ch =[str characterAtIndex:]; ()//通 ...

  8. C 和 OC 字符串转换 NSString 和 char * 转换 const char* 与 char *

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { char *s = "He ...

  9. QF——OC字符串

    OC中的字符串: C中没有字符串类型,用字符数组和指针代替. OC中引入了字符串类型,它包括NSString 和 NSMutableString两种 NSString是不可变的,已经初始化便不能更改: ...

  10. OC字符串的使用(一)

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

随机推荐

  1. javascript 理解继承

    一.继承-通过原型实现继承 function Father() { this.FatherSkin = "yellow"; }; Father.prototype.getFathe ...

  2. 鼠标事件-拖拽2(不能拖出指定对象的div)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  3. Java web中的web-xml中标签定义之jsp-config

    <jsp-config> 包括<taglib> 和<jsp-property-group> 两个子元素. 其中<taglib>元素在JSP 1.2时就已 ...

  4. Linux扩展根目录下的空间

    自己通过root创建了一个新用户,然而当我使用这个新用户时发现,/home/my中的空间只有几十M,完全不能满足我的使用,所以通过下面的方法扩展根下的空间. 我的本次操作,参考于 http://www ...

  5. 排查 Azure 虚拟机的远程桌面连接问题

    与基于 Windows 的 Azure 虚拟机 (VM) 的远程桌面协议 (RDP) 连接可能会因各种原因而失败,使用户无法访问 VM. 问题可能出在 VM 上的远程桌面服务.网络连接或主计算机上的远 ...

  6. BigDecimal setScale()设置无效 scale()取得的值不是setScale()设置的值

    最近查看rebate数据时,发现一个bug,主要现象是,当扣款支付宝的账号款项时,返回的是数字的金额为元,而数据库把金额存储为分,这中间要做元与分的转化,这个转化规则很简单,就是*100的,所以一开始 ...

  7. ajax实现跨域请求

    因为现在一直用的mvc,所以就以mvc来说说ajax跨域提交. 首先说说跨域,简单说就是不同域名访问,比如在aaa.com访问bbb.com. 就拿招聘网站来说,分为两种用户,求职者和企业,求职者端是 ...

  8. 字典构造、合并(dict)、排序

    使用dict,zip方法将两个list合并为dict keys = ["b", "a", "c", "e", " ...

  9. 沉淀再出发:java中的CAS和ABA问题整理

    沉淀再出发:java中的CAS和ABA问题整理 一.前言 在多并发程序设计之中,我们不得不面对并发.互斥.竞争.死锁.资源抢占等等问题,归根到底就是读写的问题,有了读写才有了增删改查,才有了所有的一切 ...

  10. VS 2012 在 windows 8 中无法使用 Deubgger.Lunch() 对服务进行调试

    找到了外文资料:   Debugger.Launch() not displaying JIT debugger selection popup on Windows 8/8.1   If execu ...