NSString:
范围NSRange
用来表示事物相关的事宜
typeof struct _NSRange
{
unsigned localtion;
unsigned length;
} NSRange;
localtion表示字符里面的字符范围或者数组元素的其实范围,length表示该字符串所包含的元素个数。比如:Objective-c is a cool language.中cool可以用location17,length4的范围来表示,location还可以用NSNotFound来表示这个值没有表示范围。
创建NSRange有三种方法
法一:直接赋值给字符串
NSRange range;
range.location=17;
range.length=4
法二:使用C语言的聚合结构赋值机制
NSRage range = {17,4};
法三:使用Cocoa提供的一个快捷函数NSMakeRange()
NSRange range = NSMakeRange(17,4);
NSMakeRange()的好处就是可以在任何函数中使用它,例如作为参数传递:
[anObject flarbulateWithrange:NSMakeRange(17, 4)];
NSString语法就是再双引号前加上@符号,例如@"Hi~”
创建字符串:stringWithFormat
+ (id) stringWithFormat:(NSString *) format,…;
NSString *str;
str = [NSString stringWithFormat:@"I am %d years old and my wight is %d Kg.",23,65];
其结果为:
I am 23 years old and my weight is 65kg.
stringWithFormat是一个类方法。
字符串长度:length
- (NSUInteger) length
(NSUInteger和NSInteger区别就是:牵着是无符号整型,后者是有符号整型。)
可以这样用
NSUInteger len = [str length]
也可以这样
if ([str length] > 35)
{
NSLog(@"Wow,this string is really tall !")
}
字符串比较:isEqualToString
isEqualToString用来比较接收方(recever,接受消息的对象)和作为参数传递过来的字符串。isEqualToString返回一个BOOL值(YES或NO)来表示两个值是否相同。
-(BOOL)isEqualToString:(NSString *) aString
NSString *thing1 = @"Hello
World !";
NSString *thing2 = [NSString stringWithFormat:@"Hello
World !"];
if ([thing1 isEqualToString:thing2]) {
NSLog(@"They are the same !");
}
注:比较两个字符串要使用isEqualToString而不能简单地使用==来判断
要是比较两个字符串,可以使用compare方法
-(NSComparisonResult) compare:(NSString *) aString;
compare来比较两个字符串,并且返回一个NSComparisonResult对象,NSComparisonResult描述如下
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
比如:[@“Tron” compare:@“Tom”]将返回NSOrderedAscending(前者的长度大于后者)
[@“genious” compare @“brillient”]将返回NSOrderedDescending(前者长度小于后者)
[@“aaa” compare @“aaa”]将返回NSOrderedSame(两者长度相等)
不区分大小写的比较方式:
-(NSComparisonResult) compare:(NSString *) aString option:(NSStringCompareOptions) mask;
option是一个掩位码,可以使用|来添加选项标记,常用选项如下
NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch:完全比较,区分大小写
NSNumericSearch:比较字符串个数而不是字符串的值。如果没有这个选项,100会排在99前面。
所以不区分大小写的比较方式:
if ([thing1 compare:thing2 option:NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame)
{
NSLog(@"They match");
}
字符串包含:
查看字符串里面是否包含另一个字符串,或者查看某些文件名是否是以draft为开头的草稿文件,NSString提供了两种方法,其一是以字符串开头,另一个是以字符串结尾。
- (BOOL) hasPrefix:(NSString *) aString;
- (BOOL) hasSuffix:(NSString *) aString;
NSString *fileName = @"draft-chapter.pages";
if ([fileName hasPrefix:@"draft"])
{
NSLog(@"This is a draft");
} else if ([fileName
hasSuffix:@".pages"]) {
NSLog(@"This is a pages");
}
要判断字符内是否还有别的字符可以使用rangeOfString
-(NSRange) rangeOfString:(NSString *) aString;
可变性
NSString是不可变的,并不是不可以操作他们,可以对其进行字符串的比较、查找、创建等,不过不可以对其进行字符的增减。不过Cocoa提供了一个子类,NSMutableString,可是用来改变字符串。
+ (id) stringWithCapacity:(NSUInteger) capacity;
这样只是给NSMutableString提供一个建议容量,当然也可以超出建议。这个推荐是一个最优值,如果已经开辟了40M的空间,那么后续的操作会很快的。如下可以创建一个可变的字符串
NSMutableString *string = [NSMutableString stringWithCapacity:42];
一旦有了可变的字符串,就可以对生成的字符串进行各种操作
- (void) appendString:(NSString *) aString;
- (void) appendFormat:(NSString *) format,…;
appendString:接受aString参数,然后将其复制到接受对象的末尾。
appendFormat:的工作方式与stringWithFormat类似,但是不会创建字符串,而是将格式化后的字符串添加到字符串末尾。
NSMutableString *string = [NSMutableString stringWithCapacity:50];
[string appendString:@"Hello World !"];
[string appendFormat:@"I am %d years old",23]
结果string被赋值为
Hello World !I am 23 years old
可以使用deleteCharactersInrange方法来删除字符串中的字符。
- (void) deletecharacterInRange:(NSRange *) aRange;
这时比如我们要从通讯录里面删除一个好友Jack,那么可以这么做。首先创建一个好友列表。
NSMutableString *friend = [NSMutableString stringWithCapacity:50];
[friend appendString:@"Tom Mary James Evan Jack Jim”];
接下来要找到Jack名字出现的范围。
NSRange jackRange = [friend rangeOfString:@"Jack"];
jackRange.length++
然后我们就可以从通讯录里面踢掉Jack
[friend deleteCharactersInRange:jackRange];
结果中Jack就从通讯录中删除了
Tom Mary James Evan Jim
这时我们在任何可以使用NSString的时候可以替换为NSMutableString,任何时候。
当然stringWithFormat也可以使用于NSMutableString对象。
NSMutableString *string = [NSMutableString stringWithFormat:@"Joy-%d",2];
这样string的初始值就是Joy-2