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

被折叠的 条评论
为什么被折叠?



