iOS开发中字符串截取时出现的小问题及解决

朋友前几天跟我说一个需求,说是有几个按钮,点一下,就将按钮上的字添加到 一字符串中,再点一下就从这个字符串中删除按钮上的字。 需求不难,但在实现时我发现了几个需要注意的点,下边是代码:
//这样写程序有警告,而且会crash
- (void)test {
    NSString* str1 = @"XXX";
    NSString* str2 = @"I love you";
    NSMutableString* str = [str1 stringByAppendingString:str2];
    if ([str rangeOfString:str2].location != NSNotFound) {
        NSRange range = [str rangeOfString:str2];
        [str deleteCharactersInRange:range];
        NSLog(@"str=%@",str);
    }
}

上边的程序之所以崩溃,原因在于方法中第三行代码NSMutableString* str = [str1 stringByAppendingString:str2];因为stringByAppendingString: 方法是NSString.h的方法,他返回一个NSString,是不可变的,这样直接付给一个可变的字符串str,则会报警告,这样会导致str不可变。从而在进行删除操作时会崩溃。 下边是我修改后的代码:

- (void)test {
    NSString* str1 = @"XXXX";
    NSString* str2 = @"I love you";
    NSMutableString* str3 = [str1 stringByAppendingString:str2];
//只需在这里多写一步,调用NSMutableString的初始化方法用str3初始化str,这样便会正常生成可变字符串。
    NSMutableString* str = [NSMutableString stringWithString:str3];
    if ([str rangeOfString:str2].location != NSNotFound) {
        NSRange range = [str rangeOfString:str2];
        [str deleteCharactersInRange:range];
        NSLog(@"str=%@",str);
    }
}

关于可变于不可变属性的内容,可以参考我的博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值