Objective C中的字符串及集合
一. NSString字符串
1. 基本概念:
1) Cocoa中提供NSString和NSMutableString两种字符串,前者用于处理内容不变、固定的字符串,而NSMutableString类用于处理内容可变的字符串;
继承关系:NSObjectàNSStringàNSMutableString
2) NSString的字符编码格式为Unicode编码;
NSStringEncoding:定义的常量
NSASCIIStringEncoding: ASCII
NSUTF8StringEncoding; UTF-8
NSUnicodeStringEncoding; UTF-16
2. 字符串的生成
1) 使用@””标识NSString字符串,如:
NSString str =@”yang”;
2) 但使用上述方式只能生成含有英文和数字的NSString实例,要生成含有汉子等双字节的字符串实例,必须使用:
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc
- (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding
第一个方法创建自动释放型的实例。后一个方法是执行alloc方法后进行初始化的;
3) 使用格式创建字符串:
+ (id)stringWithFormat:(NSString *)format, ...
- (id)initWithFormat:(NSString *)format ...
格式本身是NSString串,因此加上@,如果里面有NSString字符串实例,用%@标识;
NSString str =[NSString stringWithFormat:@“%@pro”,str1];
4) NSRange用于定义一个数据的范围
NSRangerange = NSMakeRange(0,5);
3. 字符串处理
1) 字符串长度:- (NSUInteger)length
2) 取字符串某个位置的字符
- (unichar)characterAtIndex:(NSUInteger)index
3) 拼接字符串:
-(NSString *)stringByAppendingString: (NSString*)aString
-(NSString *)stringByAppendingFormat: (NSString*)format...
例:str2 = [str stringByAppendingString:@”%@%@”,str3,str4];
4) 求子字符串:
- (NSString *)substringFromIndex:(NSUInteger)anIndex
- (NSString *)substringToIndex:(NSUInteger)anIndex
- (NSString *)substringWithRange:(NSRange)aRange
5) 比较字符串大小:
- (BOOL)isEqualToString:(NSString *)aString
6) 比较前置和后置串:
- (BOOL)hasPrefix:(NSString *)aString
- (BOOL)hasSuffix:(NSString *)aString
7) 字符串检索:
- (NSRange)rangeOfString:(NSString*)aString
8)
二. NSMutableString字符串
1. 生成
生成方法与NSString相同,但是不能使用@的方法生成NSMutable字符串;
NSString:
+(id)string;//生成一个空字符串
2. 追加字符串
- (void)appendString:(NSString*)aString
- (void)appendFormat:(NSString*)format ...
3. 插入字符串
- (void)insertString:(NSString*)aString atIndex:(NSUInteger)anIndex
4. 删除字符串
- (void)deleteCharactersInRange:(NSRange)aRange
5.字符串可以进行文件的读写;
集合部分
cocoa中,数组、字典以及 集合部分都分可变和不可变两种;
可变的可以增加、删除和修改里面的数据,不可变的则不能;
三. NSObject àNSArray àNSMutableArray
在Objective C中也可以使用C语言的数组,如:NSString* names[6];
但是不方便,要使用NSArray数组,数组必须是Cocoa的对象。因此int,char这些数据类型不能直接包括在内(包装类可以实现)
1) 初始化:
指定一个对象初始化:
+ (id)arrayWithObject:(id)anObject
NSArray*array = [NSArray arrayWithObject:string];
2) 多个对象进行初始化
- (id)initWithObjects:(id)firstObj, ...
+(id)arrayWithObjects:(id)firstObj, ...
array= [NSArrayarrayWithObjects:@”tom”,@”yang”,@”blacks”,nil];
指定了多个对象后,最后一个参数必须指定为nil,否则出错;
3) 数组长度: - (NSUInteger)count
4) 通过索引获得对象:
- (id)objectAtIndex:(NSUInteger)index
在NSArray中,也可以通过索引来获取元素,但是不能使用C语言中括号中指定索引的方法,必须使用上面的方法;
5) 获取某个元素的索引位置:
- (NSUInteger)indexOfObject:(id)anObject
四. NSMutableArray
NSMutableArray是NSArray的子类,父类的所有方法子类都可以用。
1) 其他的初始化方法:
-(id) initWithCapacity:(NSUInteger) numItems
+(id) arrayWithCapacity:(NSUInteger) numItems
+ (id)array;//创建内容为空的数组;
2) 添加对象
- (void)addObject:(id)anObject
//
- (void)addObjectsFromArray:(NSArray*)otherArray
//
- (void)setArray:(NSArray*)otherArray
//
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
3) 对象的删除
- (void)removeObject:(id)anObject
4) 更改某个位置的对象:
-(void) replaceObjectAtIndex:(NSUInteger) indexwithObject:(id) object
五. 字典
用key-value形式存储数据;
1) 初始化
1. 指定一个键值对初始化NSDictionary
+ (id)dictionaryWithObject:(id)anObject forKey:(id < NSCopying>)aKey
dic= [NSDictionary dictionaryWithObject:@”Inter i5” forKey:@”CPU”];
2. 指定多个键值对初始化NSDictionary,两个数组或多个键值对
+ (id)dictionaryWithObjects:(NSArray*)objects forKeys:(NSArray*)keys
+ (id)dictionaryWithObjectsAndKeys:(id)firstObject ,...
2) 获取字典中键值对的个数
-(NSUInteger) count;
3) 获取所有的key和值
-(NSArray*)allvalues;
-(NSArray*) allkeys;
4) 从key值得到value值
-(id) objectForkey: (id)key
六. NSMutableDictionary
1) 生成空字典
NSDictionary +(id)dictionary;
2) 追加键值对
NSMutableDictionary
-(void)setObject:(id)key forKey: (id)key;
3) 删除键值对
-(void)removeObjectForkey: (id)key;
七. NSSet,NSMutableSet
Set是无序集合,其他跟array和dictionary类似;
1) 向Array,Dictionary,Set中添加元素,会主动持有他的所有权;
2) 删除元素时,会释放其所有权;
八. 快速枚举
for …in语法
for(Type variable in expression){
statements }
数组的快速枚举
for(NSString *element in array){
NSLog(@”%@”,element);
}
字典的快速枚举
for(NSString *key in dictionary){
NSLog(@”english:%@ number:%@”, [dictionaryobjectForKey:key],key);
}