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

分析问题可知:

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. MongoDB for Java

    开发环境 操作系统:Windows7 IDE: MyEclipse Database: MongoDB 开发依赖库 bson-3.0.1.jar mongodb-driver-3.0.1.jar mo ...

  2. Angular js部分关键字的理解

    模板:动态模板,是动态的,直接去处理DOM的,而不是通过处理字符串模版(静态模板) mvc:核心思想实现"数据管理-数据模型Model.应用逻辑-控制器Controller.数据表现-视图V ...

  3. HTTP状态码和HTTP请求头

    HTTP报文是在Web服务器和浏览器之间进行交换的文本数据,一种是从浏览器发出的请求,一种是服务器发出的响应. 请求报文的第一行包括:1.请求方法 2.当前使用的HTTP协议版本 3.请求地址 GET ...

  4. IIS支持http协议的:put、delete等方法

    HTTP常见方法:DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH 以下是从网上搜索的方法:其实经过测试,只配置最后那个web.config就可以实现这个功能: ...

  5. 没有对比就没有伤害,memcache and redis

    Memcached 与 Redis 的关键性能指标比较 性能对比: Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis在存储小数据时比 Memcached 性 ...

  6. 关于serialVersionUID与序列化"

    java序列化trick and trap 厂内经常出现序列化对象版本不匹配问题,于是发本文说明一些序列化的注意点 调用MQ.memcached.rpc等等涉及到远程通讯的都会经过序列化,虽然客户端透 ...

  7. python的enumerate函数

    python的enumerate函数用于循环索引和元素 例如 foo = 'abc' for i , ch in enumerate(foo): print ch, '(%d)' % i 输出结果: ...

  8. JFinal启动报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Connector

    - 错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/ ...

  9. HTML学习---HTTP基础学习详解

    1.HTTP访问服务器原理 客户端输入IP->查找本地hosts缓存->有则直接用获取到的IP访问服务器->服务器响应后返回客户端->客户端页面显示               ...

  10. Visual Studio 2017 连接Oracle

    VS 2017 连接 Oracle 12 因为Visual Studio自带的数据文件已经不能支持超过10g以上的了,所以需要另外 下载插件 本机环境 宿主机的环境:win7,Visual Studi ...