IOS学习之NSString

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(174)];

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。