Objective-C 征途:String Party

        这是Objective-C Party系列的第二篇,在这里,我会介绍数据类型的一个元素------字符串。字符串在开发编程的过程中,几乎是不可或缺的,其实Objective-C上的字符串与其他开发语言的字符串没有太大的分别,都是用来显现数据的!Cocoa中用来处理字符串的类就是NSString,我会在这里介绍NSString的创建、获取大小、比较、搜索字符、可变性,通过这一部分的学习,我们就可以大概掌握NSString日常出现得比较频繁的用法!

        1.创建

         用得比较多的一个类方法就stringWithFormat:,stringWithFormat:就是一个工程方法,它会根据你提供的参数创建新的NSString对象。当然还有其他很多方法来创建NSString,但就不再这里详述了,大家有兴趣可以查看IOS SDK帮助文档。

NSString *message = [[NSString alloc]initWithFormat:@"I am a Objective-C developer!"];
+(id)stringWithFormat:(NSString *)format,...;

         再看stringWithFormat:的原型,首先要注意的地方时,stringWithFormat:函数是用前导加号(+)来开始声明,就是说stringWithFormat:是一个类方法;第二个就原型末尾的参数表示省略号(...),表示该函数接受多个参数来格式化、生成新的NSString对象。

        

         2.获取大小

         这里获取大小所要说的内容比较少,就是获取字符串的字符长度,方法返回的是字符串中字符的个数(无符号整形),我直接上一段代码。

unsigned int length = [message length];

         

         3.比较

          比较是字符串常见的操作。但在比较的过程中,有些程序员习惯性地使用‘==’比较符号来比较两个字符串,如果在C#或者java开发语言上,可能会得到你想要的结果,但是Objective-C是C语言的扩展集,对字符串的处理也沿用了C语言的风格。使用‘==’来比较两个字符串,只是比较他们的指针值,而不是他们的值。

 

NSString *string1 = @"hello string1";
    NSString *string2 ;
    string2 = [[NSString alloc]initWithFormat:@"%@",string1];
    if([string1 isEqualToString:string2])
    {
        NSLog(@"They are same!");
    }
    else {
        NSLog(@"They are not the same!");
    }

         

          如果按照这样的方法来输出结果:They are same!

          把isEqualToString:改成==,得到的结果却是:They are not the same!

          个中的原理,我想大家也很了解了!用于比较的方法还有一个,是很有用的:

 

- (NSComparisonResult) compare:(NSString *)string;

         

          compare:将接收对象和传递来的字符串逐个字符地进行比较,返回一个NSComparisonResult(就是一个enum型数据)来显示比较结果:

 

typedef enum _NSComparisonResult {
     NSOrderedAscending = -1,
     NSOrderedSame,
     NSOrderedDesending
}NSComparisonResult;

        

         compare:进行的是区分大小写的比较。Objective-C还有一个方法compare:options:,它能给我们更多的控制权。options参数是一个位掩码。你可以使用或运算符(|)来添加选项标记。常用的选项:

          *  NSCaseInsensitiveSearch: 不区分大小写字符。

          *  NSLiteralSearch:  进行完全比较,区分大小写。

          *  NSNumericSearch:  比较字符串的字符个数,而不是字符值。

          如果你想忽略大小写和字符个数,那么就可以这样编写代码:

 

if([string1 compare:string2 options:NSCaseInsensitiveSearch|NSNumericSearch]==NSOrderedSame)
{
    NSLog(@"They are match!");
}

        
        4.可变性

      NSString是不可变的,但是你可以用它来生成新的对象,查找字符等。但是你不能以删除或者增加字符的形式来改变它。所以Objective-C考虑到这一点,添加了NSString的一个子类:NSMutableString。使用NSMutableString可以预分配一块内存去存储它,这样后续的操作就会快很多。

 

NSMutableString *string3 = [NSMutableString stringWithCapacity:50];
[string3 appendString:@"I like "];
[string3 appendFormat:@"%@",@"IOS"];

        先看一下上面的例子。第一行,首先创建了NSMutableString对象,要注意的是50这个参数是要来有何用的呢?50是NSMutableString对象初始化的时候预分配的一个字符长度,也就是说,可以在NSMutableString对象中添加50个字符。这里并没有把对象的长度给定死,而是一个参考,如果对象的长度超过了50,便会自动增加自身的容量。

再看看第二、第三行代码,这里的原型是:

 

- (void) appendString: (NSString *) aString;
- (void) appendFormat: (NSString *) format,...;


        都是用以给NSMutableString对象添加字符的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值