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 > ) { 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字符串处理的更多相关文章
- OC字符串常用函数
创建一个字符串对象: NSstring * str1 = @"hello"; NSString * str = [[NSString alloc]initWithString:@& ...
- OC字符串的常用方法
网上写的关于字符串常用方法的博客很多,这里我简单做了下总结!不喜勿喷哦! 一.创建字符串 #import <Foundation/Foundation.h> //NSString //创建 ...
- c语言字符串转OC字符串
// 如果把c语言字符串转OC字符串,@(C字符串) char *c = "abc"; NSLog(@"%@", @(c));
- OC字符串与C语言字符串之间的相互转换
1.C转OC字符串 const char *cString = "This is a C string"; // 动态方法 NSString *ocString1 = [[NSSt ...
- OC字符串NSString
========================== 面向对象编程进阶和字符串 ========================== Δ一.类的设计模式—单例 [单例]程序允许过程中,有且仅有一块内存 ...
- oc 字符串
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- OC字符串的一些常用的函数。
)//获取字符串长度 NSUInteger len= str.length; () //通过指定索引返回对应的字符 unichar ch =[str characterAtIndex:]; ()//通 ...
- C 和 OC 字符串转换 NSString 和 char * 转换 const char* 与 char *
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { char *s = "He ...
- QF——OC字符串
OC中的字符串: C中没有字符串类型,用字符数组和指针代替. OC中引入了字符串类型,它包括NSString 和 NSMutableString两种 NSString是不可变的,已经初始化便不能更改: ...
- OC字符串的使用(一)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
随机推荐
- MySQL mysqldump数据导出基本操作
mysqldump mysqldump命令是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 选项 --all-databases, -A:导 ...
- jQuery和MVVM类框架的编程区别点
本文说的mvvm框架以react为列,其他应该也是类似的: react实际上仅仅是帮助我们再View层简化,让我们仅仅需要专注数据,只要数据改变,所有的视图就会自己跟随着改变, 本人自己做react项 ...
- VS2010项目转换成VS2008
声明:本篇文章不是本人原创,但是网站的地址没有记下来,所以不能贴出来.但此方法本人亲自验证有效. 一.将.sln文件中的 Microsoft Visual Studio Solution File, ...
- Android学习笔记(3)----手机调试[OFFLINE]的解决方式
问题描述 今天用Android Studio开发了一个简单的调用摄像头的App,结果想调试的时候发现选择调试设备的对话框中,手机名称后面总是跟着一个[OFFLINE]的标识,只能选择启动AVD来进行调 ...
- 微服务架构之spring cloud gateway
Spring Cloud Gateway是spring cloud中起着非常重要的作用,是终端调用服务的入口,同时也是项目中每个服务对外暴露的统一口径,我们可以在网关中实现路径映射.权限验证.负载均衡 ...
- Linux(Ubuntu16.04)下添加新用户
某些情况下,Ubuntu 使用useradd 新用户名,在home 文件夹下面看不到新创建的用户文件夹,例如: 发现找不到,spark的文件夹,因此将采用下面方式重新建立首先删除spark用户 若想给 ...
- selenium元素定位方法
一.如何找到页面元素 Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找.下面介绍几种比较常用的方法. 1.1By ID 假设页面写成这样:i ...
- spring单元测试报错:Failed to load ApplicationContext 的解决方法
使用idea 配置单元测试之后,配置完spring的注解@junit 和@runer 之后 一直报错. 最后发现是默认使用jdk1.8引起的,使用jdk1.7即可.
- Scratch3.0——项目层次结构
原文地址:https://blog.csdn.net/weiwoyonzhe/article/details/86603757 简要介绍: 本文旨在介绍scratch3.0项目层次结构及关键功能. 源 ...
- 二、python小功能记录——监听鼠标事件
1.原文链接 #-*- coding:utf-8 -*- from pynput.mouse import Button, Controller ## ======================== ...