创建字符串
NSString代表字符序列不可变的字符串,NSString的功能非常强大,oc的字符串处理比C语言的字符简单易用得多。
NSString的功能有这些:
🎇创建字符串,可以使用init开头的实例方法,也可以使用string开头的类方法,也可以直接使用@""的形式
🎇读取文件或网络URL来初始化字符串
🎇将字符串内容写入文件或URL
🎇获取字符串长度,可以获取字符个数或者字节个数
🎇获取字符串中的字符或字节,可以是指定位置的或者指定范围的
🎇获取字符串对应的C风格字符串
🎇连接字符串
🎇分隔字符串
🎇查找字符串内指定的字符和字串
🎇替换字符串
🎇比较字符串
🎇字符串比较大小
🎇对字符串中的字符进行大小写转换
NSString的常用功能
得到NSString字符串以后,接下来就可以调用NSString大量的功能性方法,这些方法的用法可以参考NSString的参考手册。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString * str = @"123456789";
NSRange pos = [str rangeOfString : @"4567"];
NSLog(@"123在str中出现的开始位置:%ld,长度为:%ld",pos.location,pos.length);
str = [str stringByAppendingString :@"10"];
//运用stringByAppendingString将10加在123456789后面
NSLog(@"%@",str);
}
}
运行结果:
上面程序中使用了一个NSRange类型的变量,NSRange并不是一个类,它只是一个结构体,它包括了location和length两个unsigned int整数值,分别代表起始位置和长度。
可变字符串(NSMutableString)
NSString类是不可变的类,即一旦NSString对象被创建,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
NSMutableString对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,因此前面介绍的NSString所包含的方法,NSMutableString都可直接使用,NSMutableString对象也可直接当成NSString对象使用。
当一个NSMutableString被创建以后,通过NSMutableString提供的appendFormat:,appendString:,deleteCharacterInRange:,insertString:atIndex:,replaceCharactersInRange:withString:,replaceOccurrencesOfString:withString:options:range:,setString:方法即可改变该字符串所包含的字符序列。
下面程序中是对其中一些方法的使用:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString * book = @"《疯狂iOS讲义》";
//创建一个NSMutableString对象
NSMutableString * str = [NSMutableString stringWithString:@"Hello"];
//追加固定字符串
//字符串所包含的字符序列本身发生了改变,因此无需重新赋值
[str appendString:@",iOS!"];
NSLog(@"%@",str);
//追加带变量的字符串
//字符串所包含的字符序列本身发生了改变,因此无需重新赋值
[str appendFormat:@"%@是一本非常不错的图书",book];
NSLog(@"%@",str);
//在指定位置插入字符串
//字符串所包含的字符序列本身发生了改变。因此无需重新赋值
[str insertString:@"fkit.org" atIndex:6];
NSLog(@"%@",str);
//删除从位置6到位置12的所有字符
[str deleteCharactersInRange:NSMakeRange(6,12)];
NSLog(@"%@",str);
//将从位置6到位置9的字符串替换成Objective-c
[str replaceCharactersInRange: NSMakeRange(6,9)withString:@"Objective-c"];
NSLog(@"%@",str);
}
}
程序的输出:
补充:
stringWithString和stringWithFormat区别
stringWithFormat会新申请一片空间并初始化字符串,所以每一个用stringWithFormat方法得到的字符串其指针都是不相同的;
而stringWithString是通过浅拷贝的方式得到字符串的,浅拷贝只拷贝指针不拷贝对象,所以其指针是相等的,内容也相等;