黑马程序员- 字符串(NSString和NSMutableString)
字符串就是一连串的字符序列,Objective-C中有俩个字符串:NSString和NSMutableString,其中NSString代表字符序列不可变的字符串,二NSMutableString则代表字符串序列可变字符串。
- 创建字符串
NSString代表字符序列不可变的字符串,大致包括如下几个功能:
1.1创建字符串:
1.2读取文件或网络URL来初始化字符串
1.3将字符串内容写入文件或URL
1.4获取字符串长度, 既可获取字符串内包括的字符个数,也可获取字符串包括的字节个数
1.5获取字符串中的字符或字节,既可获取指定位置的字符,也可获取指定范围字符
1.6获取字符串对应的C风格字符串
1.7连接字符串
1.8分割字符串
1.9查找字符串中指定的字符和子串
1.10替换字符串
1.11比较字符串
1.12字符串大小比较
1.13对字符串中的字符进行大小写转换
创建NSString对象的几种方式:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { unichar date[6]={97,98,99,100,101,102}; //使用unicode数值数组初始化字符串 NSString *str=[[NSString alloc]initWithChars : date length : 6]; NSLog(@"%@",str); char * cstr="Hello "; //将C风格的字符串转换为NSString对象 NSString *str2 =[NSString stringWithUTF8String:cstr]; NSLog(@"%@",str2); [str2 writeToFile:@"my.txt" atomically: YES encoding:NSUTF8StringEncoding error:nil]; //读取文件内容,用文件内容初始化 NSString *str3= NSString stringWithContentsOfFile:@"NSStringTest.m" encoding:NSUTF8StringEncoding error:nil; NSLog(@"%@",str3); } return 0; }
- NSString 的常用功能
NSString的常用方法
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str=@"Hello"; NSString *book=@"《茶馆》"; //在str后面追加固定的字符串 //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量 str=[str stringByAppendingString:@",ios"]; NSLog(@"%@",str); //获取字符串对应的C风格字符串 const char* cstr=[str UTF8String]; NSLog(@"获取的C字符串:%s",cstr); //str后面追加带变量的字符串 //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针 str =[str stringByAppendingFormat:@"%@是一本好书,",book]; NSLog(@"%@",str); NSLog(@"str的字符个数是%lu",[str length]); NSLog(@"str按UTF-8字符集解码后字节数为%lu",[str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]); //获取str的前十个字符组成的字符串 NSString* s1=[str substringFromIndex:10]; NSLog(@"%@",s1); //获取str从第五个字符开始,与后面所有的字符组成的字符串 NSString* s2=[str substringFromIndex:5]; NSLog(@"%@",s2); //获取ios在str中出现的位置 NSRange pos = [str rangeOfString:@"ios"]; NSLog(@"ios在str中出现的开始位置%ld,长度为%ld",(unsigned long)pos.location,pos.length); //将str的所有字符转换为大写 str =[str uppercaseString]; NSLog(@"%@",str); } return 0; }
编译运行该程序,看到如下输出
2015-12-09 11:06:05.853 NSString 的常用功能[1664:348238] Hello,ios
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] 获取的C字符串:Hello,ios
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] Hello,ios《ios疯狂讲义》是一本好书,
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] str的字符个数是24
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] str按UTF-8字符集解码后字节数为48
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] ios疯狂讲义》是一本好书,
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] ,ios《ios疯狂讲义》是一本好书,
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] ios在str中出现的开始位置6,长度为3
2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] HELLO,IOS《IOS疯狂讲义》是一本好书,
- 可变字符串(NSMutableString)
NSString是不可变的类,即一旦NSString对象被创建,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
NSMutableString对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,因此前面介绍的NSString所包含的方法,NSMutableString都可直接使用,NSMutableString对象也可直接当成NSString对象使用。
当一个NSMutableString被创建以后,通过NSMutableString提供的appendFormat:appendString:deleteCharactersInRange:interString:atIndex:replaceCharactersInRange:withString:replaceOccurrencesOfString:options:range;setString:方法即可改变字符串所包含的字符序列。
使用NSMutableString改变字符序列的示范:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString * book=@"ios疯狂讲义"; //创建一个NSMutableString对象 NSMutableString* str= [NSMutableString stringWithString:@"Hello"]; //追加固定字符串 //字符串所包含的字符序列本身发生了变化,因此无须重新赋值 [str appendString:@",ios"]; NSLog(@"%@",str); //追加带变量的字符串 //字符串所包含的字符序列本身发生了改变,因此无须重新赋值 [str appendFormat:@"%@是一本好书",book]; NSLog(@"%@",str); //在指定的位置插入字符串 //字符串所包含的字符序列本身发生了改变,因此无需重新赋值 [str insertString:@"fkjy.org" atIndex:6]; NSLog(@"%@",str); //将从位置6开始,长度为12的所有字符删除 [str deleteCharactersInRange:NSMakeRange(6, 12)]; NSLog(@"%@",str); //将从位置6开始,长度为9的所有字符替换成Objective-c [str replaceCharactersInRange:NSMakeRange(6, 9) withString:@"Objective-c"]; NSLog(@"%@",str); } return 0; }
上面程序调用了NSMutableString对象的方法来修改该字符串所包含的字符序列,编译,运行该程序,可以看到如下输出:
2015-12-09 11:26:47.141 改变字符序列[1682:354401] Hello,ios
2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,iosios疯狂讲义是一本好书
2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,fkjy.orgiosios疯狂讲义是一本好书
2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,os疯狂讲义是一本好书
2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,Objective-c好书
Program ended with exit code: 0
浙公网安备 33010602011771号