字符串对象(1)

Objective-C编程基础:创建常量字符串与基本字符串操作
本文介绍了使用Objective-C语言创建常量字符串对象的方法,并通过实例展示了字符串的基本操作,包括字符串长度计算、复制、拼接、比较、大小写转换等。详细解释了不可变与可变对象的区别,以及如何使用描述方法定制对象的显示方式。

要使用objective c语言创建一个常量字符串对象,需要在字符开头放置一个@字符,于是,表达式

@"programming is fun "

创建了一个常量字符串对象。特殊情况下,它属于NSConstantString类的常量字符串对象。NSConstantString类是字符串对象的NSString类的子类。

NSString str = @"Programming is fun";

NSLog (@"%@",stri);

程序运行的结果为:

Programming is fun

NSLog格式字符%@可以显示任何对象的全部内容,例如:数组,字典和集合。事实上,可以通过覆盖继承的description方法,来使用这些格式字符串显示你自己的类对象,如果不覆盖方法,NSLog仅仅显示类名和对象在内存中的地址,这是从NSObject类继承的description方法的默认实现。例如:可以向Fraction类中添加descriprtion方法

-(NSString *) description

{

    return [NSString stringWithFormat:@"%i/%i",numerator,denominator];

}

stringWithFormat:方法允许提供多个参数(stringWithFormat:需要的参数是格式化字符和需要格式化的数据)。这些参数使用一系列逗号分隔提供给方法。

1.可变对象与不可变对象

@"Programming is fun"创建字符对象时,会创建一个内容不可更改的对象,这称为不可变对象。可以使用NSString类处理不可变对象。如果你想要从字符串中删除一些字符,或对字符串执行搜索替换操作,这种类型的字符串是是使用NSMutableString类处理的。

如下代码展示了字符串的基本操作

#import <Foundation/Foundation.h>

int main ()

{

    @autoreleasepool {

        NSString *str1 = @"this is string A";

        NSString *str2 = @"this is string B";

        NSString *res;

        NSComparisonResult compareRsult;

        //计算字符串中的字符

        NSLog(@"Length of str1: %lu",[str1 length]);

        //将一个字符串复制到另一个字符串

        res = [NSString stringWithString: str1];

        NSLog(@"copy: %@",str2);

        //将一个字符串复制到另一个字符串的末尾

        str2 = [str1 stringByAppendingString: str2];

        NSLog(@"Concatentaton: %@",str2);

        //验证两个字符串是否相等

        if([str1 isEqualToString: res] ==YES)

            NSLog(@"str1  == res");

        else

            NSLog(@"str1  != res");

        

        //验证一个字符串是否小于、大于或等于另一个字符串

        compareRsult = [str1 compare: str2];

        if(compareRsult ==NSOrderedAscending)

            NSLog(@"str1 < str2");

        else if (compareRsult == NSOrderedSame)

            NSLog(@"str1 = str2");

        else  // 必须是NSOrderedDescending

            NSLog(@"str1 >str2");

        //将字符串转换为大写

        res = [str1 uppercaseString];

        NSLog(@"Uppercase  conversion:%s",[res UTF8String]);

        //将字符串转换为小写

        res = [str1 lowercaseString];

        NSLog(@"LowercaseString:%@",res);

        NSLog(@"original string:%@",str1);

    }

    return 0;

}

在代码的开始,声明

NSComparisonResult compareRsult;

用于保存后面执行的字符串比较的结果。

length方法可以用来对字符串中的字符进行计数。它将返回NSUInteger类型的无符号整数。

语句res = [NSString stringWithString: str1];

说明如何使用另一个字符串的内容生成一个新的字符串。在这里进行的实际上是字符串内容的复制,而不是对内存中同一字符串的引用。即str1和res指向两个不同的字符串对象,这与简单的执行以下赋之操作不同。res = str1;仅仅是创建了内存中的同一个对象的另一个引用。

使用stringByAppendingString:方法可以连接两个字符串。表达式

 str2 = [str1 stringByAppendingString: str2];

创建一个新的字符串对象,这个对象有str1和str2的字符拼接而成,然后返回结果。这项操作没有改变原来字符串对象str1和str2(因为他们都是不可变字符串对象)。

在程序中使用isEqualToString:方法检测两个字符串是否相等,即是否包含相同的字符。如果需要确定两个字符串的顺序,例如:要对字符串进行排序,可以使用compare:方法代替。与前面比较两个NSNumber对象的compare:方法相似。如果词汇中的第一个字符串小于第二个字符串,结果是NSOrderedAscending,如果两个相等,结果是NSOrderedSame,如果第一个字符串大于第二个字符串,结果是NSOrderedDescending。如果不想进行大小写字符和小写字符的比较,可以使用caseInsensitiveCompare:方法。当使用这个方法来比较字符串对象@“Gregory”和@“gregory”会相等。

代码的最后两个NSString的uppercaseString和lowercaseString,分别转换成大写字母和小写字母。同样这样的转换并不影响原来的字符串。

将str1和str2声明为不可变字符串对象,意味着它们所引用的的字符串对象的字符不可以改变,然而,引用str1和是str2是可以改变的,可以重新为它们指定其他的不可变字符串对象

如下图说明了变量res和str1声明和初始化的情形。res变量并未设置任何初始值,因此,它的内容为空。


在代码中向str1发送一个uppercaseString的消息,会依据str1创建一个新的字符串,如下:


新字符串创建后,str1仍然指向与原来的字符串对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值