Objective-C 日记③ 字符串
一、创建字符串、类方法
公式创建NSString
+(id) stringWithFormat:(NSString *) format,……;
eg:
NSString *height;
height=[NSString stringWithFormat:@"高度是: %d 长度: %d",10,20];
得到的字符串:“高度是: 10 长度: 20”
注意:
省略号:表示可以接收多个参数,类似NSLog();
加号:“+” Object-C运行时生成一个类的时候,会创建一个代表该类的类对象(类对象包含:指向超类的指针、类名、指向类方法列表的指针)
如何在声明方法时添加了加号,该方法就为类方法.这个方法属于类对象(而不是类的实例对象),常用于创建新的实例。我们称这种用来创建新对象的类方法为工厂方法(stringWithFormat就是一个工厂方法)
如果该方法将会在某个对象实例中运行 方法用前导减号(-)来开始声明
如果创建一个实例对象或者访问一些全局类数据,建议使用前导加号(+)将它声明为类的方法
二、关于大小、字符串比较
关于大小:
NSString中包含一个方便的方法length,返回的是字符串中的字符个数
使用:unsigned int length = [height length];
说明:NSString的length方法能够准确无误处理国际字符串:比如中文以及使用Unicode国际字符标准的字符串这点和C语言不同,C语言可能出现一个字符占用的空间可能多于一个字符
字符串比较:
A:isEqualToString:用来比较接收方和当作参数传递来的字符串。返回一个BOOL(YES or NO 不是true,false)类型来表示字符串内容是否相同。格式:-(BOOL) isEqualToString:(NSString *) aString;
eg:
NSString *str1 = @"hello pepe"; NSString *str2=[NSString stringWithFormat:@"hello %s","pepe"]; if([str1 isEqualToString:str2]){ NSLog(@"相同"); } else{ NSLog(@"不同"); }
结果当然是“相同”
B:compare方法 声明如下:-(NSComparisonResult) compare: (NSString *) string
compare将接收对象和传递来的字符串逐个字符的进行比较,返回一个NSComparisonResult(enum型数据)来显示比较结果。
eg:
BOOL result=[@"kaka" compare: @"pepe"]; NSLog(@"%s","kaka vs pepe"); NSLog(@"%d",result); result=[@"kaka" compare: @"kaka"]; NSLog(@"%s","kaka vs kaka"); NSLog(@"%d",result); result=[@"pepe" compare: @"kaka"]; NSLog(@"%s","pepe vs kaka"); NSLog(@"%d",result);
结果:
注意:
比较两个字符串是否相等时请用isEqualToString:而不能仅仅比较字符串的指针值;
eg:
if([str1 isEqualToString:str2]){ NSLog(@"相同"); } VS if( str1==str2){ NSLog(@"相同"); }
注意二者的区别:1、==运算符只判断str1和str2的指针数值,而不是它们所指的对象
2、如果想检查两个对象的标识此时可以使用==
3、如果想查看等价性使用isEqualToString
compare 比较字符串返回的结果有下面几种:
C:不区分大小写比较
-(NSComparisonResult) compare: (NSString *) string options: (unsigned) mask; [kəm'pærisən] 比较;对照;比喻;比较关系
options参数是一个位掩码,可以使用位或运算符(|)来添加选项标记:
NSCaseInsensitiveSearch:不区分大小写比较; [in'sensətiv] adj. 感觉迟钝的,对…没有感觉的
NSLiteralSearch:进行完全比较,区分大小写; ['litərəl] adj. 文字的;逐字的;无夸张的
NSNumericSearch:比较字符串字符个数,而不是字符值; [nju:'merik] 数;数字 adj. 数值的(等于mumerical);数字的
eg:
D:字符串中是否包含其他字符串
查询头尾是否包含某字符串:hasPrefix 、hasSuffix
-(BOOL) hasPrefix :(NSString * ) string; 检查字符串是否以某个字符串开头。 [,pri:'fiks, 'pri:fiks] 加前缀;将某事物加在前面
-(BOOL) hasSuffix: (NSString *) string; 检查字符串是否以某个字符串结尾。 ['sʌfiks, sə'fiks] vt. 添后缀 n. [语]后缀;下标
eg:
查询字符串内是否包含某字符串:rangeOfString 返回一个NSRange struct可以告诉你字符串相匹配的部分在哪里以及匹配的字符个数
-(NSRange) rangeOfString:(NSString *) string;
location用来存放字段范围的起始位置
length是该范围内所含元素的个数
eg:
三、可变性
NSString是不可变的字符串,如果需要使用可变字符串,Cocoa提供了一个NSString子类NSMutableString。
格式
-(id) stringWithCapacity:(unsigned) capacity;
可通过appendString、appendFormat来添加新字符串:-(void)appendString:(NSString *)string ; -(void) appendFormat:(NSString *)format……;
说明:
appendString接收参数string,然后将其复制到字符串对象的结尾
appendFormat与stringWithFormat类似,但它是将格式化的字符串附加到接收字符串的尾部,而不是创建新的字符串对象;
eg:
使用deleteCharactersInRange方法删除字符串中的字符:
-(void)deleteCharactersInRange:(NSRange) range;
因NSMutableString是NSString的子类所以NSString的方法NSMutableString都可以使用
eg:
作者:PEPE
出处:http://pepe.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
作者:PEPE
出处:http://pepe.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。