黑马程序员- 字符串(NSString和NSMutableString)

字符串就是一连串的字符序列,Objective-C中有俩个字符串:NSString和NSMutableString,其中NSString代表字符序列不可变的字符串,二NSMutableString则代表字符串序列可变字符串。

 

  1. 创建字符串

NSString代表字符序列不可变的字符串,大致包括如下几个功能:

1.1创建字符串:

1.2读取文件或网络URL来初始化字符串

1.3将字符串内容写入文件或URL

1.4获取字符串长度, 既可获取字符串内包括的字符个数,也可获取字符串包括的字节个数

1.5获取字符串中的字符或字节,既可获取指定位置的字符,也可获取指定范围字符

1.6获取字符串对应的C风格字符串

1.7连接字符串

1.8分割字符串

1.9查找字符串中指定的字符和子串

1.10替换字符串

1.11比较字符串

1.12字符串大小比较

1.13对字符串中的字符进行大小写转换

创建NSString对象的几种方式:

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        unichar date[6]={97,98,99,100,101,102};

        //使用unicode数值数组初始化字符串

        NSString *str=[[NSString alloc]initWithChars : date length : 6];

        NSLog(@"%@",str);

        char * cstr="Hello ";

 

        //将C风格的字符串转换为NSString对象

        NSString *str2 =[NSString stringWithUTF8String:cstr];

        NSLog(@"%@",str2);

        [str2 writeToFile:@"my.txt" atomically: YES encoding:NSUTF8StringEncoding error:nil];

        //读取文件内容,用文件内容初始化

        NSString *str3= NSString stringWithContentsOfFile:@"NSStringTest.m" encoding:NSUTF8StringEncoding error:nil;

        NSLog(@"%@",str3);
    }
    return 0;
}

 

 

  1. NSString 的常用功能

NSString的常用方法

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

     

        NSString *str=@"Hello";

        NSString *book=@"《茶馆》";

        //在str后面追加固定的字符串

        //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量

        str=[str stringByAppendingString:@",ios"];

        NSLog(@"%@",str);

        //获取字符串对应的C风格字符串

        const char* cstr=[str UTF8String];

        NSLog(@"获取的C字符串:%s",cstr);

        //str后面追加带变量的字符串

        //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针

        str =[str stringByAppendingFormat:@"%@是一本好书,",book];

        NSLog(@"%@",str);

        NSLog(@"str的字符个数是%lu",[str length]);

        NSLog(@"str按UTF-8字符集解码后字节数为%lu",[str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);

        //获取str的前十个字符组成的字符串

        NSString* s1=[str substringFromIndex:10];

        NSLog(@"%@",s1);

        //获取str从第五个字符开始,与后面所有的字符组成的字符串

        NSString* s2=[str substringFromIndex:5];

        NSLog(@"%@",s2);

        //获取ios在str中出现的位置

        NSRange pos = [str rangeOfString:@"ios"];

        NSLog(@"ios在str中出现的开始位置%ld,长度为%ld",(unsigned long)pos.location,pos.length);

        //将str的所有字符转换为大写

        str =[str uppercaseString];

        NSLog(@"%@",str);

    }

    return 0;

}

 

编译运行该程序,看到如下输出

2015-12-09 11:06:05.853 NSString 的常用功能[1664:348238] Hello,ios

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] 获取的C字符串:Hello,ios

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] Hello,iosios疯狂讲义》是一本好书,

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] str的字符个数是24

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] strUTF-8字符集解码后字节数为48

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] ios疯狂讲义》是一本好书,

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] ,iosios疯狂讲义》是一本好书,

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] iosstr中出现的开始位置6,长度为3

2015-12-09 11:06:05.854 NSString 的常用功能[1664:348238] HELLO,IOSIOS疯狂讲义》是一本好书,

 

 

 

  1. 可变字符串(NSMutableString)

 NSString是不可变的类,即一旦NSString对象被创建,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

 NSMutableString对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,因此前面介绍的NSString所包含的方法,NSMutableString都可直接使用,NSMutableString对象也可直接当成NSString对象使用。

  当一个NSMutableString被创建以后,通过NSMutableString提供的appendFormat:appendString:deleteCharactersInRange:interString:atIndex:replaceCharactersInRange:withString:replaceOccurrencesOfString:options:range;setString:方法即可改变字符串所包含的字符序列。

使用NSMutableString改变字符序列的示范:

#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:@"fkjy.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);

    }

    return 0;

}

上面程序调用了NSMutableString对象的方法来修改该字符串所包含的字符序列,编译,运行该程序,可以看到如下输出:

 

2015-12-09 11:26:47.141 改变字符序列[1682:354401] Hello,ios

2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,iosios疯狂讲义是一本好书

2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,fkjy.orgiosios疯狂讲义是一本好书

2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,os疯狂讲义是一本好书

2015-12-09 11:26:47.142 改变字符序列[1682:354401] Hello,Objective-c好书

Program ended with exit code: 0

 

posted @ 2015-12-09 11:47  coderQin  阅读(105)  评论(0)    收藏  举报