8 字符串处理

NSString

这里写图片描述

//----------------NSString初始化方式-------------
NSString *str1 = @"Hello World!"; // 字面常量
NSString *str2 = [[NSString alloc]initWithCString:"Hello World!" encoding:NSUTF8StringEncoding]; // 初始化器
NSString *str3 = [NSString stringWithCString:"Hello World!" encoding:NSUTF8StringEncoding]; // 工厂方法
恒定性

字符串是恒定的,申请之后就会在堆上申请一块固定的空间。然后当有另一个指针指向内容相同的字符串时,共享同一个对象。目的是为了节省空间,减少重复字符串造成的浪费。

例如以下两行代码,str1与str4是指向同一个地址的。这种共享机制只存在于字面常量申请的字符串。

NSString *str1 = @"Hello World!";
NSString *str4 = @"Hello World!";

但是,改变了str1并不会影响str4。因为实际上,字符串是不可更改的,每次更改实际上是重新申请了一段新的内存空间来装载字符串内容,并将指针地址重新赋值。

相等判定
// 判定字符串内容是否相等。此处为True,都是“Hello World!”
if( [str1 isEqualToString:str2]){
    NSLog(@"str1 Value Equals str2");
}

// 判定字符串指针地址是否相等。此处为False,地址不同。
if(str1==str2){
    NSLog(@"str1 Ref Equals str2");
}else{
    NSLog(@"str1 Ref Not Equals str2");
}

// 此处为True,因为都是常量字符串。共享同一块地址。
if(str1==str4){
    NSLog(@"str1 Ref Equals str4");
}else{
    NSLog(@"str1 Ref Not Equals str4");
}
字符串基本操作
//----------------字符串基本操作,都是通过返回新值的方式进行改变-------------

NSLog(@"size: %zd, length: %zd]", sizeof(str1), str1.length);

// 遍历字符
for(int i = 0 ;i < [str1 length];i ++){
    NSLog(@"%c",[str1 characterAtIndex:i]);
}

str1 = str1.uppercaseString;//大写
str1 = str1.lowercaseString;//小写
str1 = str1.capitalizedString;//首字母大写

NSRange range = [str1 rangeOfString:@"Hello"];
NSLog(@"location: %lu, length:%lu",range.location,range.length);
NSString* substr = [str1 substringFromIndex:6];
BOOL yOrN = [str1 hasPrefix:@"Hello"];
NSString* format=[NSString stringWithFormat:@"[%d, %d]",100,200];

NSMutableString

这里写图片描述

因为NSMutableString是NSString的子类,所以可以使用NSString的指针指向NSMutableString的对象,从而让该NSString变量具有可变性,但其实,本质上,这是一个NSMutableString对象。

这里写图片描述

//----------------NSMutableString的增删改查方法,会直接改变字符串------
NSMutableString *mustr3 =[NSMutableString stringWithCapacity:100];// 自定义缓存容量,这样可以减少字符串增长时改变capacity所需要性能损失。

[mustr3 appendString:@"Hello Objective"];

[mustr3 insertString:@"-C" atIndex:mustr3.length];

[mustr3 setString:@"Hi Objective"];

NSRange replaceRange = NSMakeRange(0, 2);
[mustr3 replaceCharactersInRange:replaceRange withString:@"Hello"];

NSRange deleteRange = NSMakeRange(5, 10);
[mustr3 deleteCharactersInRange:deleteRange];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值