day4_1: NSString 和 NSMutableString 的使用

Objective-C与Swift在iOS开发中的应用
本文探讨了Objective-C与Swift两种编程语言在iOS开发领域的应用与区别,介绍了它们各自的特点、优势以及在实际项目中的使用场景。Objective-C作为iOS早期的主要开发语言,至今仍有许多成熟的应用依赖其开发;而Swift作为一种更现代、更安全的语言,正逐渐成为iOS开发的主流选择。文章详细对比了这两种语言的语法、性能、内存管理等方面,并提供了如何在现有项目中迁移或整合使用这两种语言的策略。

main.m

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
//    //创建一个字符串对象
//    NSString * string=[[NSString alloc]initWithFormat:@"123"];
//    NSLog(@"string = %@",string);
//    
//    //通过initWithString:初始化方法创建的对象做了内存优化,如果是通过常量区来创建,建议直接保存常量区地址;如果通过其他内存的内容来创建,就需要在堆区开辟内存并且将内容复制到堆区。
//    NSString *string1=[[NSString alloc]initWithString:string];
//    NSLog(@"string1 = %@",string1);
    
    //-----1.1--NSString:不可变字符串-------
    //1、类函数初始化生成(不建议使用此方法)
    NSString * str1=[[NSString alloc]initWithString:@"abc"];
    NSLog(@"%@",str1);
    
    //2、直接赋值方法(字符串初始化,建议使用这种方法)
    NSString * str2 =@"abc";
    NSLog(@"%@",str2);
    
    //3、实例方法初始生成
    NSInteger age=10;
    NSString *str3=[[NSString alloc]initWithFormat:@"age is %ld",age];
    NSLog(@"%@",str3);
    
    
    //-----1.2--基本数据类型和字符串类型间转换-------
    
    //X.1 OC中的字符串转换为C语言的字符串
    NSString * cStr = [[NSString alloc]initWithUTF8String:"Duke"];
    const char * str4 = [cStr UTF8String];
    printf("str4 = %s\n",str4);
    
    //X.2 将基本数据类型转换为字符串类型
    NSInteger age2=18;
    NSString *ageStr = [[NSString alloc]initWithFormat:@"%ld",age2 ] ;
    NSLog(@"%@",ageStr);
    
    //X.3 把浮点型数据转换成字符串
    float weight = 55.5;
    NSString *weightStr = [[NSString alloc]initWithFormat:@"%.2f",weight] ;
    NSLog(@"学辉的体重是:%@",weightStr);
    
    //X.4 把一个字符串,转换成一个基本数据类型
    NSInteger age3= [ageStr integerValue];
    NSLog(@"转换后的数据为:%ld",age3);
    
    //X.5 把字符串转换回浮点型的数据
    float weight2 = [weightStr floatValue];
    NSLog(@"%.2f",weight2);
    
    
    //-----1.3--获取或截取字符串-------
    
    //2.1 获取字符串长度 length;获取长度返回值是无符号长整型
    NSUInteger length=[str3 length];
    NSLog(@"length = %lu",length);
    
    //2.2 fromIndex 截取字符串;从index索引开始截取到字符串的末尾(包括这个索引)
    str3 = [str3 substringFromIndex:5];
    NSLog(@"fromIndex = %@",str3);
    
    // toIndex 截取字符串,从头到index这个索引为至截取,
    str3 = [str3 substringToIndex:3];
    NSLog(@"toIndex = %@",str3);
    
    
    //-----1.4--拼接字符串-------
    
    str3 = [str3 stringByAppendingString:@"this is a error string"];
    NSLog(@"str3 = %@",str3);
    
    NSString *str5 = @"I am a student.";
    NSInteger age5=18;
    str5 = [str5 stringByAppendingFormat:@"My age is %ld",age5 ];
    NSLog(@"str5 = %@",str5);
    
    
    //-----1.5--替换字符串-------
    
    NSString * str6 =@"good good study,day day up";
    str6 = [str6 stringByReplacingOccurrencesOfString:@"good" withString:@"GOOD"];
    NSLog(@"str6 = %@",str6);
    
    
    //-----1.6--字符串比较-------
    
    //2.5字符串比较,判断字符串是否相等(区分大小写)
    //isEqualToString 是布尔型的,返回值为YES或NO
    NSString * str7 = @"zero";
    NSString * str8 = @"hour";
    BOOL rel = [str7 isEqualToString:str8];
    NSLog(@"rel = %d",rel);
    
    //2.6字符串的比较
    NSString * str9 = @"a";
    NSString * str10 = @"A";
    NSComparisonResult rel2 = [str9 compare:str10];
    NSLog(@"rel2 = %ld",rel2);
    
    
    //-----1.7--替换字符串-------
    
    //作业练习1,给定一个图片文件名,判断字符串中是否以".png"结尾,如果是就替换成“jpg”,如果不是就拼接".jpg";
    NSString *imgName=@".png home.png1";
    //判断后缀,返回bool值
    //hasSuffix:判断是否以某字符串结尾;
    //hasPrefix:判断是否以某个字符串开始.
    BOOL isPng = [imgName hasPrefix:@".png"];
    if (isPng) {
        //将第一个的字符串中所有的.png 替换为 .jpg;
        imgName = [imgName stringByReplacingOccurrencesOfString:@".png" withString:@".jpg"];
    }else{
        //拼接字符串.jpg
        imgName = [imgName stringByAppendingFormat:@".jpg"];
    }
    NSLog(@"%@",imgName);
    
    
    //-----2.1--NSMutableString(不可变字符串)------
    
    //NSMutableString
    //NSMutableString 是 NSString 类的子类
    //该类创建的字符串是一个动态的可变字符串,可以对字符串进行增删改等操作。
    //-----2.1--可变字符串的初始化
    NSMutableString *mStr1 = [[NSMutableString alloc]initWithString:@"abc"];
    //3.2
    NSMutableString *mStr2 = [[NSMutableString alloc]initWithFormat:@"age is %ld",age ];
    NSLog(@"mStr2 = %@",mStr2);
    /*
     不可变字符串和可变字符串的区别
     不可变的字符串的拼接方法:stringByAppendingString:返回值是NSString *,方法名是以string开头,需要一个指针变量去指向拼接后的新的字符串
     可变字符串的拼接方法:appendString:
     没有返回值,方法名不是以string开头
     直接修改原有的字符串,不需要一个指针进行指向
     */
    //-----2.2--插入字符-------
    [mStr1 insertString:@"234" atIndex:1];//从0开始数,1是第二位
    NSLog(@"mStr1 = %@",mStr1);
    
    //-----2.3--删除字符串中某一段内容------
    
    //2.3.1删除字符串中某一段内容[NSMakeRange(1, 2),搜索索引为1~2的范围]
    NSRange range = NSMakeRange(1, 2);
    [mStr1 deleteCharactersInRange:range];
    NSLog(@"mStr1 = %@",mStr1);
    
    //2.3.2 C语言中结构体的初始化
    NSRange range2={1,3};    //NSRange是结构体
    NSLog(@"range2 = %@",range2);
    
    //2.3.3删除字符串中指定的内容,动态删除(rangeOfString:@"234" 在mStr1中搜索@"234")
//    NSRange range3  = [mStr1 rangeOfString:@"234"];
//    NSLog(@"range3 = %@",NSStringFromRange(range3));
    
    //删除range范围的字符串
//    [mStr1 deleteCharactersInRange:range3];
//    NSLog(@"%@",mStr1);
    
    
    //-----2.4--可变字符串的替换-------
    
    //练习2 用NSMutableString完成下述功能
    //给定一个图片文件名,判断字符串中是否以png结尾,如果是就替换成"jpg",如果不是就拼接“.jpg”
    //初始化一个可变的字符串
    NSMutableString *mStr3  = [[NSMutableString alloc]initWithString:@"home"];
    //判断这个字符串是否是以".png"结尾的,如果是返回YES,不是返回NO
    BOOL isPng2=[mStr3 hasSuffix:@".png"];
    if (isPng2) {
        //求出@“.png”这个字符串mStr3里面的索引位置
        NSRange range = [mStr3 rangeOfString:@".png"];
        //替换range中的字符串用@".jpg"
        [mStr3 replaceCharactersInRange:range withString:@".jpg"];
    }else{
        //在mStr3结尾拼接上".jpg";
        [mStr3 appendString:@".jpg"];
    }
    NSLog(@"%@",mStr3);
    
    return 0;
}

/*
 总结 格式化输出符
 %s:输出的是C语言当中的字符串“abc”
 %@:输出的是OC当中的对象,因为OC中的字符串是一个对象,所以它也可以输出OC中的字符串
 
 */
/*
 总结:@“”只能初始化不可变的字符串
 完全等价于下面这个字符串,将C语言中的字符串转换为OC中的字符串
 [[NSString alloc] initWithUTF8String:"abc"];
 
 initWithString:
 initWithFormat:
 initWithUTF8String:
 */



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值