[from]http://www.jianshu.com/p/7994b0ad6b88

问题:NSString到底是不是字符串?

NSString 是 OC中专门处理字符串的对象!提供了转换大小写,拼接字符串,lastPathComponent等方法!

一.NSString : 不可变字符串

1.字符串的创建

// 创建一个新的空字符串
NSString *string1 = [NSString string];
// C语言字符串
char *name = "hello word";
// 初始化一个字符串,在赋值
NSString *string2 = [[NSString alloc] init];
string2 = @"wangchong";
NSString *string3 = @"hello";
// 一下两个方法是把字符串做一次拷贝,返回拷贝后的字符串
NSString *string4 = [NSString stringWithString:@"hello"];
NSString *string5 = [[NSString alloc] initWithString:string3];
NSLog(@"%p,%p,%p",&string3,&string4,&string5);
NSString *string6 = [string5 stringByAppendingString:@"\nHi"];
// 把C的字符串转化为OC的字符串
NSString *str = [[NSString alloc] initWithUTF8String:"hello world"];
NSString *str2 = [NSString stringWithUTF8String:"hello world"]; // 用格式化字符串初始化 可完成字符串的拼接以及完成C的字符串与OC的字符串的转化
int a = 123;
NSString *str3 = [[NSString alloc]initWithFormat:@"a = %d %s%@", a, "aaaa", @"bbbb"];
NSString *str4 = [NSString stringWithFormat:@"%s","hello world"];

2.字符串的类型转换

    NSString * str = @"hello";
const char *p = [str UTF8String]; // 将OC字符串转化为C的字符串 str = @"123";
int a = [str intValue]; // 将数字串转化成整型数据
[str floatValue]; // 将数字串转化成float型
[str doubleValue]; // 将数字串转化成double型 // 结构体 输出
// 结构体 [点] 转换字符串
NSString *str1 = NSStringFromCGPoint(point); // 结构体 [尺寸] 转换字符串
NSString *str2 = NSStringFromCGSize(size); // 结构体 [矩形] 转换字符串
NSString *str3 = NSStringFromCGRect(rect);

3.字符串大小写转换

<pre name="code" class="objc"> // 全部转为大写
// 结果 ABC
[@"abc" uppercaseString];
// 全部转为小写
// 结果 bcd
[@"BCD" lowercaseString];
// 首字母大写
// 结果 Acb
[@"acb" capitalizedString];

4.字符串比较

   // 比较两个字符串内容是否相同
// 相等返回 yes 不相等返回 no
BOOL b =[str isEqualToString:str2]; //判断str2中是否包含str1
[str2 containsString:str1];
// 忽略大小写进行比较
NSComparisonResult result1 = [string caseInsensitiveCompare:str];
NSComparisonResult result2 = [string localizedCaseInsensitiveCompare:str]; // 两个字符串内容比较
// NSComparisonResult result = {NSOrderedAscending, NSOrderedSame,NSOrderedDescending}
// NSOrderedAscending 右边 > 左边 == -1
// NSOrderedSame 内容相同 == 0
// NSOrderedDescending 左边 > 右边 == 1 NSComparisonResult result3 = [str compare:str2];
NSComparisonResult result4 = [string compare:@"taojian" options:NSCaseInsensitiveSearch];
NSComparisonResult result5 = [string compare:@"taojian" options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length)];
NSComparisonResult result6 = [string compare:@"taojian" options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length) locale:nil];
NSComparisonResult result7 = [string localizedCompare:str]; options: // 枚举参数
enum{
NSCaseInsensitiveSearch = 1, // 不区分大小写比较
NSLiteralSearch = 2, // 区分大小写比较
NSBackwardsSearch = 4, // 从字符串末尾开始搜索
NSAnchoredSearch = 8, // 搜索限制范围的字符串
NSNumbericSearch = 64 // 按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt // 以下定义高于 mac os 10.5 或者高于 iphone 2.0 可用 ,
NSDiacriticInsensitiveSearch = 128, // 忽略 "-" 符号的比较
NSWidthInsensitiveSearch = 256, // 忽略字符串的长度,比较出结果
NSForcedOrderingSearch = 512 // 忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者 NSOrderedDescending // 以下定义高于 iphone 3.2 可用 ,
/// 只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法。
/// 使用通用兼容的比较方法,如果设置此项,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearc
NSRegularExpressionSearch = 1024

5.字符串搜索

  // 判断字符串是否以abc开头
[@"abcdfa" hasPrefix:@"abc"];
// 判断字符串是否bcd结尾
[@"adbcd" hasSuffix:@"bcd"];
// 判断字符串是否包含指定字符串,返回位置和长度
NSRange range = [@"123456" rangeOfString:@"456"];
// 搜索字符串所在的范围
NSRange range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch]; // 输出{17, 3}
// 指定范围进行搜索
NSRange range = NSMakeRange(0, 9);
range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch range:range];
// 找与之开头相同的字符 返回相同开头的字符串
NSString *string = @"fg s abcdefg hijklmn s d \n fdsgf";
NSString *str = [string commonPrefixWithString:@"fgsdfgrg" options:NSLiteralSearch]; // 输出fg

6.字符串截取

<pre name="code" class="objc"><pre name="code" class="objc">NSString * str5 = @"helloworld";
NSString * ptr1 = [str5 substringToIndex:2];// 字符串抽取 从头开始抽取2个字母,返回he
NSString * ptr2 = [str5 substringFromIndex:4];// 从第4个字母开始抽取到字符串结束,返回oworld
NSRange range1 = {6,2};// 结构体初始化
NSString * ptr3 = [str5 substringWithRange:range1];// 在range指定范围内抽取,返回or
NSString * ptr4 = [str5 substringWithRange:NSMakeRange(6,2)];// NSMakeRange可以生成一个结构体 // 取出字符串"123-456-789-000"中的数字部分,组成一个新的字符串输出
NSMutableString *strm = [NSMutableString stringWithString:@"123-456-789-000"]; //只有可变字符串有这个方法
[strm replaceOccurrencesOfString:@"-"
withString:@""
options:NSLiteralSearch
range:NSMakeRange(0, strm.length)];
NSLog(@"%@",strm); //输出:123456789000

7.字符串的遍历

// 根据\n遍历
NSString *string = @" s abcdefg hijklmn s d \n fdsf";
// 根据\n一行一行的打印
[string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop){
NSLog(@"\n%@",line);
}
]; // 根据 条件options 遍历
NSString *string = @" s abcdefg hijklmn s d ";
NSMutableString * mutableString = [NSMutableString string];
// NSStringEnumerationByWords:将string按空格分开,并且会自动清理首尾的空格
// 这个方法会把中间多余的空格也清理掉,比如上面的字符串,s和d之间有两个空格,会变成一个空格
[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop)
{
[mutableString appendFormat:@"%@ ",substring];
}]; // 删除我们添加的末尾的一个空格
[mutableString deleteCharactersInRange:NSMakeRange(outputString.length-1, 1)];

8.路径操作与数组操作

// 用指定字符串分割字符串,返回一个数组
NSArray *array = [@"1,2,3,4,5,6" componentsSeparatedByString:@","]; // 根据空格拆分
NSArray *array = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // 将数组中的字符串组合成一个文件路径
NSMutableArray *components = [NSMutableArray array];
[components addObject:@"Users"];
[components addObject:@"CentralPerk"];
[components addObject:@"Desktop"];
NSString *path = [NSString pathWithComponents:components];
NSLog(@"%@",path); //Users/CentralPerk/Desktop // 将一个路径分割成一个数组
NSArray *array1 = [path pathComponents];
NSLog(@"%@",array1); // 判断是否为绝对路径(依据:是否以'/'开始)
path = @"/Users/CentralPerk/Desktop";
NSLog(@"%i",[path isAbsolutePath]); // 获取最后一个目录
NSLog(@"%@",[path lastPathComponent]); // 删除最后一个目录
NSLog(@"%@",[path stringByDeletingLastPathComponent]); // 拼接一个目录
NSLog(@"%@",[path stringByAppendingPathComponent:@"aaa"]); //Users/CentralPerk/Desktop/aaa
NSLog(@"%@",[path stringByAppendingString:@"aaa"]); //Users/CentralPerk/Desktopaaa
NSLog(@"%@",[path stringByAppendingFormat:@"%@%@",@"b",@"c"]); //Users/CentralPerk/Desktopbc

9.文件扩展名

// 拓展名出来
// 获取拓展名,不带.
NSString *str2 = @"Users/CentralPerk/Desktop/test.txt";
NSLog(@"%@",[str2 pathExtension]);
// 添加拓展名,不需要带.
NSLog(@"%@",[str2 stringByAppendingPathExtension:@"mp3"]);
// 删除拓展名,带.一块删除
NSLog(@"%@",[str2 stringByDeletingPathExtension]);

10.文件操作

// 将字符串设置为path制定的文件的内容
-(id) initWithContentsOfFile:path encoding:enc error:err
// 创建一个新字符串并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中错误
+(id) stringWithContentsOfFile:path encoding:enc error:err // 将字符串设置为url(NSURL *)url的内容,使用字符编码enc,如果非零,则返回err中的错误
-(id) initWithContentsOfURL:url encoding:enc error:err
// 创建一个新的字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误
+(id) stringWithContentsOfURL:url encoding:enc error:err

11.补充

// 求字符串长度
[str1 length]
// 获取字符串中的字符
[str1 characterAtIndex:1]
// 清楚左右两段的空格
NSString *str = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// 在字符串后面补0
NSString *str = [string stringByPaddingToLength:12 withString:@"0" startingAtIndex:0];

二、NSMutableString

// 将不可变的字符串转换为可变的字符串
NSMutableString * str = [[NSMutableString alloc]initWithString:@"hello world"]; // 在指定下标为2的(不要越界)位置插入013字符串
[str insertString:@"013" atIndex:2]; // 在字符串末尾追加字符串taotao
[str appendString:@"taotao"]; // 从0位置删除2个字符
[str deleteCharactersInRange:NSMakeRange(0, 2)]; // 给字符串重新赋值
[str setString:@"yintian"]; // 将3位置后1个字符替换成ios字符串
[str replaceCharactersInRange:NSMakeRange(3, 1) withString:@"ios"]; // 根据选项 opts ,使用指定 range 中的nsstring2 替换所有的 nsstring
-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range
文/WCdevil(简书作者)
原文链接:http://www.jianshu.com/p/7994b0ad6b88
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

NSString总结的更多相关文章

  1. NSString属性什么时候用copy,什么时候用strong?

           我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy.那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢 ...

  2. iOS UIAlertController跟AlertView用法一样 && otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 写法

    今天写弹出框UIAlertController,用alertView习惯了,所以封装了一下,跟alertView用法一样,不说了,直接上代码: 先来了解一下otherButtonTitles:(nul ...

  3. 【去除NSString 字符串中的空格换行符】

    @interface NSString (DeletWhiteSpace) // 返回一个去掉前后空格的字符串或者下划线,如果自己是一个nil 返回@“” - (NSString *)trimming ...

  4. NSString 的常用操作

    NSString *testStr01=@"HelloWord"; NSString *testStr02=[testStr01 substringToIndex:];//取头(从 ...

  5. 时间戳转化为日期TimeStamp转NSDate转NSString

    //时间戳处理 NSInteger time = [self.album.updatedAt integerValue] / 1000; NSNumber *timer = [NSNumber num ...

  6. iOS - Json解析精度丢失处理(NSString, Double, Float)

    开发中处理处理价格金额问题, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:经过测试其实系统NS ...

  7. iOS NSString中的搜索方法rangeOfString

    NSString *str = @"your://aaa?backscheme=my"; //在str中查找“backscheme=”,并返回一个NSRange类型的值,我们可以通 ...

  8. NSString相关操作

    //创建一个字符串对象 NSString * str_1 = @"Hello"; //字面量方法 ; NSString * str_2 = [NSString stringWith ...

  9. NSString 和NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData =[@"testdata" dataUsingEncoding:NSUTF8StringEncoding ...

  10. NSString 初始化方法的内存比较

    NSString *str1 = @"hello"; NSString *str2 = @"hello"; NSString *str3 = [NSString ...

随机推荐

  1. js框架——angular.js(2)

    1. 模块的利用扩充 模块的名称也可以当做变量使用,例如: <body ng-app> <label><input type="checkbox" n ...

  2. Lucene中的合并因子mergeFactor

    mergeFactor 是用来决定segment该如何被addDocument()方法进行合并的. 当mergeFactor取比较小的值时,索引时所使用的内存较少 而且搜素未优化的速度会比较快.因此, ...

  3. socket常见几种异常

    第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行newServerSocket(port)(po ...

  4. java中list的使用方法

    LIST是个容器接口,可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数, 用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据 ...

  5. Linux学习 -- Shell编程 -- 字符处理命令

    sort排序命令 sort [选项] 文件名 -f 忽略大小m写 -n 按数值型,默认字符串型 -r 反向 -t 指定分隔符 -k n[,m] 指定字段范围,默认行尾 eg. sort -n -t & ...

  6. Chapter 1 First Sight——11

    I didn't relate well to people my age. 我没有向人们叙述清楚我的年龄 Maybe the truth was that I didn't relate well ...

  7. Linux运维常用的命令详解

    1. 查看系统内核版本 [root@funsion geekxa]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m 显示了系 ...

  8. 解决getJSON的缓存问题

    $.getJSON("/portal/edu/getAllEdu?adr="+Math.random(),function(data){

  9. zabbix Lack of free swap space

    Zabbix初始设计是大型公司用于监控服务器集群的,但日常中也用于监控VPS或云主机.后者情况下Zabbix的很多配置和属性就没有经过优化,取决于监控的对象和用途,经常需要对一些Zabbix配置进行调 ...

  10. UI和UE有什么区别呢?

    UCD(以用户为中心的设计)UE(用户体验)UI(用户界面)HCI(人机交互)usability(易用性)