范围NSRange
用来表示事物相关的事宜
typeof
struct
_NSRange {
unsigned localtion;
unsigned length;
} 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
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 ];
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 !" )
}
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 !" );
}
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;
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" );
}
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" );
}
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 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 ” ];
[friend appendString: @"Tom Mary James Evan Jack Jim ” ];
接下来要找到Jack名字出现的范围。
NSRange
jackRange = [friend rangeOfString:
@"Jack"
];
jackRange.length++
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