Objective-C语法-字符串NSString和可变字符串NSMutableString

Objective-C里核心的处理字符串的类就是NSString和NSMutableString这两个类,这两个类完成了Objective-C中字符串大部分功能的处理。这两个类的最主要的区别是NSString创建赋值后不能动态修改长度和内容,除非给重新赋值。而NSMutableString类似与链表的,在创建赋值后可以进行修改长度,插入,删除等操作。

一.NSString

 //NSString char
    char *s = "holle Objective-C";//C语言
    NSString *str = @"hello C";   //OC
    
    
    //转换
    NSString *str1 = [NSString stringWithUTF8String:s];//UTF8编码格式C—>OC
    NSLog(@"str1 = %@",str1);
    
    const char *s1 = [str UTF8String];//反编码 OC->C
    NSLog(@"s1 = %s",s1);

1.创建NSString字符串

    NSString *str2 = @"holle world";//初始化1,自动管理释放内存
    NSString *str3 = [[NSString alloc]init];//初始化2,手动释放内存
    NSString *str4 = [NSString stringWithFormat:@"a=%@",str];//初始化3,格式化字符串
    NSString *str4_1 = [NSString stringWithUTF8String:"字符串转换utf-8格式"]; //字符串转换为utf-8格式 参数为char*类型

2.字符串拼接

    NSString *str5 = [str stringByAppendingString:str1];
    NSLog(@"str5 = %@",str5);
    
    NSString *str5_1 = [str stringByAppendingFormat:@"str%@",str1];
    NSLog(@"str5_1 = %@",str5_1);

3.大小写转换

    NSString *str6 = @"aBcDFe";
    NSString *str7 = [str6 lowercaseString];//都转为大写
    NSString *str8 = [str6 uppercaseString];//都转为小写
    NSString *str8_1 = [str6 capitalizedString];//首字母大写
    NSLog(@"str7 = %@",str7);
    NSLog(@"str8 = %@",str8);
    NSLog(@"str8_1 = %@",str8_1);

4.字符串判断

//(1)前后缀判断
    NSString *str9 = @"www.dooo.com";
    BOOL hasPrefix = [str9 hasPrefix:@"www"];//判断前缀
    BOOL hasSuffix = [str9 hasSuffix:@"com"];//判断后缀
    
    
    //(2)判断两字符串是否相同
    BOOL doSame = [str7 isEqualToString:str8];
    
    
    //(3)判断字符串为空
    //需判断 string == nil 和 string0.length == 0 同时成立。
    if (str9 == nil && str9.length == 0) {
        NSLog(@"字符串nil");
    }
    else{ NSLog(@"不为空");
    };
    
    //(4)compare方法(comparer返回的三种值) 判断两者内容是否相同
    //1>NSOrderedSame 判断两者内容是否相同
    //2>NSOrderedAscending 判断两对象值的大小(按字母顺序进行比较,tring02大于tring01为真)
    //3>NSOrderedDescending 判断两对象值的大小(按字母顺序进行比较,string02小于string01为真)
    NSString *string01 = @"This is a String!";
    NSString *string02 = @"This is a String!";
    BOOL result = ([string01 compare:string02] == NSOrderedSame);
    NSLog(@"result:%d",result);
    

5.分割字符串

    //(1)按指定字符分割(返回数组)
    NSString *str10 = @"a,bc,def,g,hijklmn";
    NSArray *strArray = [str10 componentsSeparatedByString:@","];
    for (NSString *str in strArray) {
        NSLog(@"str = %@",str);
    }
    
    //(2)按照范围截取字符串
    NSRange range = NSMakeRange(0, 5);//0为起始点 5为长度
    NSString *str11 = [str10 substringWithRange:range];
    NSLog(@"str11 = %@",str11);
    
    //(3)从某一处开始截取后面的字符串
    NSString *str12 = [str10 substringFromIndex:2];//从索引为2截取后面的
    NSLog(@"str12 = %@",str12);
    
    //(4)从开始截取到某一位
    NSString *str13 = [str10 substringToIndex:7];//从开始截取到索引为7的
    NSLog(@"str13 = %@",str13);
    
    //(6)拆分为每一个元素字符 遍历
    for (int i = 0; i < str10.length; i++) {
        NSLog(@"%c",[str10 characterAtIndex:i]);
    }


6.查找搜索

    NSString *str14 = @"ad cd ef gh ij ad";
    //查找指定字符串的位置(正向查找,只显示第一个位置)
    NSRange range1 = [str14 rangeOfString:@"ab"];
    NSLog(@"起始索引点%ld,长度%ld",range1.location,range1.length);
    //前面有汉字时,后面可能不提示
    
    //根据索引替换
    NSString *str15 = @"hello IOS,holle world";
    NSString *str16 = [str15 stringByReplacingCharactersInRange:NSMakeRange(6, 1) withString:@"i"];
    NSLog(@"str16 = %@",str16);
    
    //根据指定字符串替换原字符串的子串
    NSString *str17 = [str15 stringByReplacingOccurrencesOfString:@"IOS" withString:@"iOS"];
    NSLog(@"str17 = %@",str17);

7.数据转换

    NSString *valueStr = @"123";
    
    //(1)字符串转布尔
    BOOL boolValue = [valueStr boolValue];
    NSLog(@"bool = %d",boolValue);
    
    //(2)字符串转整形
    int intValue = [valueStr intValue];
    NSInteger integer = [valueStr integerValue];
    NSLog(@"int = %d",intValue);
    NSLog(@"integer = %d",intValue);
    
    //(3)转单双精度
    float floatValue = [valueStr floatValue];
    double doubleValue = [valueStr doubleValue];
    NSLog(@"float = %f",floatValue);
    NSLog(@"double = %f",doubleValue);
    
    //(4)其他数据转str
    NSString *srtingOfValue = [NSString stringWithFormat:@" %d  %d  %ld  %f  %f",boolValue,intValue,integer,floatValue,doubleValue];
    NSLog(@"string = %@",srtingOfValue);

8.文件字符串操作(读写)

    //(1)从文件读取字符串:initWithContentsOfFile方法
    NSString *path = @"/Users/Jack/Desktop/jack.text";
    NSString *jackString =[[NSString alloc]initWithContentsOfFile:path];
    NSLog(@"jackString = %@",jackString);
    
    
    //(2)写字符串到文件:writeToFile方法
    NSString *strPath = @" 筑梦小丑--每个人都是小丑,我们在调侃着这个世界。每天取悦着别人,却还不一定能够得到别人的尊重和理解。但,你很重要, 因为你就是你能拥有的全部。你存在, 整个世界才存在。你看得到阳光, 整个世界才看得到阳光.你失去平衡, 世界就失去平衡.你消失, 世界就消失。所以你很重要, 你就是你能拥有的全部";
    //文件不存在会自动创建,文件夹不存在则不会自动创建会报错
    NSString *path1 = @"/Users/Jack/Desktop/jack.text";
    NSError *error;
    [strPath writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error) {
        NSLog(@"导出失败:%@",error);
    }else{
        NSLog(@"导出成功");
    }




二.NSMutableString

    //NSSMutableString:可变字符串是字符串的子类
    //实例化的另一种方法  写一个分配字符串的大小,不可以超过这个范围
    NSMutableString *str1 = [[NSMutableString alloc]initWithCapacity:10];
    [str1 setString:@"hello"];
    NSLog(@"str1 = %@",str1);
    
    //增加字符串
    [str1 appendString:@"-"];
    [str1 appendFormat:@"%@",@"world"];
    NSLog(@"str1 = %@",str1);
    
    //替换字符串
    //替换字符串
    NSRange range = [str1 rangeOfString:@"world"];//查找wrold
    [str1 replaceCharactersInRange:range withString:@"world iOS"];//替换
    NSLog(@"str1 = %@",str1);
    
    //插入字符串
    [str1 insertString:@"java-" atIndex:12];//插入第6位
    NSLog(@"str1 = %@",str1);
    
    //删除字符串
    NSRange range1=[str1 rangeOfString:@"java-"];
    [str1  deleteCharactersInRange:range1];
    NSLog(@"str1 = %@",str1);

    //字符串拷贝
    NSMutableString *str2 = [NSMutableString stringWithString:@"字符串1"];
    NSMutableString *str3;
    str3 = str2; //赋值
    [str3 appendString: @" 和字符串2"];
    NSLog(@"str2 = %@",str2);
    NSLog(@"str3 = %@",str3);
    //为什么给str3添加数据后 str2的数据也改变了?
    //这就是指针的魅力所在,因为我们操作的是指针,str2 = str1  意思是两个指针同时指向一块内存,那么str3指向的内存内容改变以后str2当然跟着改变了。




NSString 常用方法总结

+(id)stringWithContentsOfFile:path encoding:enc err 创建一个新字符串并将其设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误
+(id)stringWithContentsOfURL:url encoding:enc err 创建一个新字符串并将其设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误
+(id)string 创建一个新的空字符串
+(id)stringWithString:nsstring 创建一个新字符串,将其内容设置为 nsstring 内容
-(id)initWithString:nsstring 将字符串内容设置为 nsstring 内容
-(id)initWithContentsOfFile:path encoding:enc error:err 将字符串设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误
-(id)initWithContentsOfURL:url encoding:enc error:err 将字符串设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误
-(UNSigned int)length 返回字符串中字符数目
-(unichar)characterAtindex:i 返回索引i 所在UniCode 字符
-(NSString*)substringFromIndex:i 返回从索引 i 开始到结尾的子字符串
-(NSString*)substringWithRange:range 根据指定范围返回子字符串
-(NSString*)substringToIndex:i 返回从字符串开始到 索引 i 的子字符串
-(NSComparator*)caseInsensitiveCompare:nsstring 比较两个字符串大小,忽略大小写
-(NSComparator*)compare:nsstring 比较两个字符串大小
-(BOOL)hasPrefix:nsstring 测试字符串是否以 nsstring 开始
-(BOOL)hasSuffix:nsstring 测试字符串是否以 nsstring 结尾
-(BOOL)isEqualToString:nsstring 测试两个字符串是否相等
-(NSString*)capitalizedString 返回字符串,串中的每个单词的首字母大写,其余字母小写
-(NSString*)lowercaseString 返回转换为小写的字符串
-(NSString*)uppercaseString 返回转换为大写的字符串
-(const char*)UTF8String 返回UTF8编码格式的字符串
-(double)doubleValue 返回转换为double 类型的字符串
-(float)floatValue 返回转换为 float 类型的字符串
-(NSInteger)integerValue 返回转换为 NSInteger 类型的新字符串
-(int)intvalue 返回转换为 int 的字符串

NSMutableString 可修改字符串常用方法

+(id)stringWithCapacity:size 创建一个字符串,容量为size大小
-(id)initWithCapacity:size 初始化一个字符串,容量为size
-(void)setString:nsstring 将字符串设置为 nsstring
-(void)appendString:nsstring 在字符串末尾追加字符串 nsstring
-(void)deleteCharatersInRange:range 删除指定range 中的字符
-(void)insertString:nsstring atIndex:i 以索引 i 为起始位置插入 nsstring
-(void)replaceCharatersInRange;range withString:nsstring 使用 nsstring 替换 range 指定的字符
-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range 根据选项 opts ,使用指定 range 中的nsstring2 替换所有的 nsstring


附:本文Demo

http://download.csdn.net/detail/jackjia2015/9408544





你可能感兴趣的:(Objective-C语法-字符串NSString和可变字符串NSMutableString)