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

分析问题可知:

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

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

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

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

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

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

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

  1. /**
  2. 字符串处理,添加 字符串,如果已包含此字符串,将其移除
  3.  
  4. @param com 要插入或者移除的字符串
  5. @param se 连接符 seperator
  6. @return 处理结果
  7. */
  8. - (NSString *)addComponet:(NSString *)com with:(NSString *)se {
  9.  
  10. if (IsStrEmpty(com) || IsStrEmpty(se)) {
  11. return self;
  12. }
  13.  
  14. // 时间 空间 复杂度,另一种思路是用 逗号分割成数组,对数组进行操作
  15. // 1. NSMaxRange(range) > 0 ? contain : do not contain
  16. // 1.1 range.location == 0 && NSMaxRange(range) == self.filterParam.brandCode.length e.g. haier
  17. // 1.2 range.location == 0 && self.filterParam.brandCode.length > NSMaxRange(range) e.g. haier,haixin,...
  18. // 1.3 range.location > 0 && self.filterParam.brandCode.length == NSMaxRange(range) e.g. ...haixin,haier
  19. // 1.4 range.location > 0 && self.filterParam.brandCode.length > NSMaxRange(range) e.g. ...,haier,....
  20. NSRange range = [self rangeOfString:com];
  21. if (range.length > ) {
  22.  
  23. if((range.location == ) && (self.length == NSMaxRange(range))) {
  24.  
  25. return nil;
  26. } else if((range.location == ) && (self.length > NSMaxRange(range))) {
  27.  
  28. range = NSMakeRange(range.location, range.length + se.length);
  29. return [self stringByReplacingCharactersInRange:range withString:@""];
  30. } else {
  31.  
  32. range = NSMakeRange(range.location - se.length, range.length + se.length);
  33. return [self stringByReplacingCharactersInRange:range withString:@""];
  34. }
  35. } else {
  36.  
  37. NSString *suffix = [NSString stringWithFormat:@"%@%@", se, com];
  38. return [self stringByAppendingString:suffix];
  39. }
  40.  
  41. return self;
  42. }

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. 文本(TextView)

    今天给大家介绍一下简单的文本. 首先我们看下TextView的继承关系和一些基本的属性: xml文件如下: <?xml version="1.0" encoding=&quo ...

  2. hustoj搭建--常见问题

    环境: Centos6.5   apache2+PHP5+MySQL 设置apache服务器网站根路径(设置之后可通过IP访问OJ) 1. 进入目录/etc/httpd/conf下的httpd.con ...

  3. spring单元测试报错:Failed to load ApplicationContext 的解决方法

    使用idea 配置单元测试之后,配置完spring的注解@junit 和@runer 之后 一直报错. 最后发现是默认使用jdk1.8引起的,使用jdk1.7即可.

  4. jQuery的安装

    一.jQuery的安装 下载 jQuery 有两个版本的 jQuery 可供下载: Production version - 用于实际的网站中,已被精简和压缩. Development version ...

  5. IDEA创建maven项目时,maven太慢-archetypeCatalog=internal

    创建项目时候加上archetypeCatalog=internal 参数, archetypeCatalog表示插件使用的archetype元数 据,不加这个参数时默认为remote,local,即中 ...

  6. Django基础之form操作

    Form表单的功能 自动生成HTML表单元素 检查表单数据的合法性 如果验证错误,重新显示表单(数据不会重置) 数据类型转换(字符类型的数据转换成相应的Python类型) Form相关的对象包括 Wi ...

  7. 排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

  8. Visual Studio 2017RC 版本相关资料

    Visual Studio 2017 RC版本说明 1.社区版 Visual Studio Community 2017 RC Visual Studio Community 2017 RC 是针对个 ...

  9. SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)

    复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...

  10. 模块复习 staticmethod和classmethod的区别

    Python中classmethod与staticmethod区别 classmethod:类方法staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访 ...