Foundation中的NSMutableString与NSString



Objective-C 中核心处理字符串的类是 NSString  NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重新给这个字符串赋值。而NSMutableString 创建赋值以后可以动态在该字符串上更改内容与长度。

为什么NSString使用Copy而不是用strong?
我这样说你就明白了 A->B A中的一个MutableString给B中的一个Property(NSString类型)赋值 首先是能接受的,父类可以接受子类,如果是retain,仅仅是生成一个指针,计数器加一,然后指向那个MutableString。如果MString改变,B中那个跟着改变,因为是同一块内存区域。而选择Copy相当于又生成了一个NSString,与A中的MutableString独立。

1.字符串的创建
    //经典的字符串赋值  
    NSString *str0 = @"iamMOMO";  
      
    //字符串格式化合并分别包括  
    //NSString*类型 int类型 char*类型   
    NSString *str1 = [NSString stringWithFormat:@"我的名字:%@ 我的年龄:%d 我的邮箱:%s",@"MOMO", 25,"[email protected]"];  
      
    //字符串赋值 参数中只可以写一个字符串 和第一种很像  
    NSString *str2 = [NSString stringWithString:@"我是字符串"];  
     
    //字符串转换为utf-8格式 参数为char*类型  
    NSString *str3 = [NSString stringWithUTF8String:"字符串转换utf-8格式"];  
2.字符串合并
    NSString *s1 = @"hualiu is a good man";//不可变字符串

        NSString *s3 = [s1 stringByAppendingString:@" wrong"]; // 在S2基础上创建字符串

3.字符串的遍历
每一个字符串其实是由若干个char字符组成,字符串的遍历实际上就是将字符串中的每一个字符提取出来。
 //经典的字符串赋值  
    NSString *str = @"YUSONGMOMO";  
      
    //字符串的长度  
    int count = [str length];  
      
    NSLog(@"字符串的长度是%d",count);  
      
    //遍历字符串中的每一个字符  
    for(int i =0; i < count; i++)  
    {  
        char c = [str characterAtIndex:i];  
        NSLog(@"字符串第 %d 位为 %c",i,c);  
    }  

4.字符串的比较
 //字符串完全相等比较  
    if([str0 isEqualToString:str1])  
    {  
        NSLog(@"字符串完全相等");  
    }  
      
    //字符串以开头比较  
    if([str0 hasPrefix:@"雨松"])  
    {  
        NSLog(@"字符串str0以雨松开头");  
    }  
      
    //字符串以结尾比较  
    if([str1 hasSuffix:@"MOMO"])  
    {  
        NSLog(@"str1字符串以MOMO结尾");  
    }  
关于NSMutableString

 NSMutableString  继承NSString类,那么NSString 提供的方法在NSMutableString中基本都可以使用,NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符串删除字符串 指定位置插入字符串,使用它来操作字符串会更加灵活。
1.字符串尾部添加

使用alloc在内存中创建字符串对象后边可以动态的操作这个字符串,修改与添加等。
appendstring 方法:向字符串尾部添加一个字符串。
appendFormat方法:向字符串尾部添加多个类型的字符串,可以添加任意数量与类型的字符串。
NSMutableString * str = [[NSMutableString alloc] init];  
      
    //添加普通的字符串  
    [str appendString:@"aaa"];  
      
    //添加字符串 整型 字符型  
    [str appendFormat:@"我的名字:%@ 我的年龄:%d 我的邮箱:%s",@"雨松MOMO", 25,"[email protected]"];  
     
    NSLog(@"str = %@",str);  

2.字符串中删除元素
stringWithString 方法:用于创建字符串初始化赋值
rangeOfString方法:传入字符串返回一个在该字符串中的范围 也可以写 NSMakeRange(0, 3)意思是范围在字符串0位到第3位
deleteCharactersInRange:删除字符串 参数为Range 就是删除的范围。
NSMutableString *str = [NSMutableString stringWithString:@"雨松MOMO喜欢哇咔咔~"];  
      
    //删除字符串中含"雨松"的字符  
    [str deleteCharactersInRange: [str rangeOfString: @"雨松"]];      
      
    NSLog(@"str = %@",str);  


3.字符串插入
stringWithString 方法:用于创建字符串初始化赋值
insertString方法:第一个参数 插入的字符串对象, 第二个参数 插入的位置。

//创建字符串  
    NSMutableString *str = [NSMutableString stringWithString:@"雨松MOMO喜欢哇咔咔~"];  
      
    //在str第10位插入字符串  
    [str insertString:@"与小可爱" atIndex:10];  
      
    NSLog(@"str = %@",str);  

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NSString方法
+(id) stringWithContentsOfFile:path encoding:enc error:err
创建一个新字符串并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中错误
+(id) stringWithContentsOfURL:url encoding:enc error:err
创建一个新的字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误
+(id) string
创建一个新的空字符串
+(id) stringWithString:nsstring
创建一个新的字符串,并将其设置为nsstring
-(id)initWithString:nsstring
将分配的字符串设置为nsstring
-(id) initWithContentsOfFile:path encoding:enc error:err
将字符串设置为path制定的文件的内容
-(id) initWithContentsOfURL:url encoding:enc error:err
将字符串设置为url(NSURL *)url的内容,使用字符编码enc,如果非零,则返回err中的错误
-(id) (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
测试字符串是否以nsstrng结尾
-(BOOL)isEqualToString:nsstring
测试两个字符串是否相等
-(NSString *) capitalizedString
返回每个单词首字母大写的字符串(每个单词的其余字母转换为小写)
-(NSString *)lowercaseString
返回转换为小写的字符串
-(NSString *)uppercaseString
返回转换为大写的字符串
-(const char*)UTF8String
返回转换为UIF-8字符串的字符串
-(double)doubleValue
返回转换为double的字符串
-(float)floatValue
返回转换为浮点值的字符串
-(NSInteger)integerValue
返回转换为NSInteger整数的字符串
-(int)intValue
返回转换为整数的字符串


NSMutableString方法
+(id) stringWithCapacity:size
创建一个字符串,初始包含size的字符
-(id) initWithCapacity:size
使用初始容量为size的字符串来初始化字符串
-(void) setString:nsstring
将字符串设置为nsstring
-(void) appendString:nsstring
在接收者的末尾附加nsstring
-(void) deleteCharactersInRange:range
删除指定range中的字符
-(void) insertString:nsstring atIndex:i
以索引i为起始位置插入nsstring
-(void) replaceCharactersInRange:range withString:nsstring
使用nsstring替换range指定的字符
-(void) replaceOccurrencesOf
String:nsstring withString:
nsstring2 options:opts range:range

根据选项opts。使用指定range中的nsstring2替换所有的nsstring。选项可以包括NSBackwardsSearch(从范围的结尾开始搜索)NSAnchoredSearch(nsstring必须匹配范围的开始),NSLiteralSearch(执行逐字节比较以及NSCaceInsensitiveSearch的按位或组合)




NSMutableString  

[aString substringToIndex:([aString length]-1)];//字符串删除最后一个字符

//字符串删除最后一个字符

 NSRange range = {0,1};

 [aStr deleteCharactersInRange:range];


NSString是不可变的,意思是他声明的对象我们不可以改变,如果要改变,可以使用它的子类:NSMutableString

 

你可以使用类方法:stringWithCapacity来创建一个新的NSMutableString,声明如下:


*  (id) stringWithCapacity: (unsigned) capacity:

 

可按如下方法声明一个新的可变字符串:

NSString *str1;

Str1 = [NSMutableString stringWithCapacity:42];

 

可以使用appendString或appendFormat来对可变字符串操作:

  - (void)appendString: (Nsstring *) aString;

  -  (void) appendFormat: (NSString *) Format;

 

appendString 接受参数aString,然后将其复制到接受对象的末尾。

appendFormat类似,他将格式化的字符串附加在接受对象的末尾,而不是创建新的对象。


EXP:

NSMutableString *string;

string = [NSMutableString stringWithcapacity:50];

[string appendString: @”hello,there”];

[string appendFormat: @”human %d!”, 39];

 这段代码的string最后被赋值为:hello,there human 39!

 

你还可以使用deleteCharactersInRange:方法来删除字符串中的字符:

- (void) deleteCharactersInRange: (NSRange) range;

 

通常将deleteCharactersInRange: 和rangeOfString:连在一起使用,NSMutableString可以使用NSString的全部功能,包括rangeOfString:、字符串比较和其他任何功能。


例如,你列了一个所有朋友列表,你突然又不喜欢Jack了,想把他从朋友列表里删除:


//朋友列表初始化

NSMutableString *friends;

friends = [NSMutableString stringWithcapacity: 50];

[friends appendString: @”level fang jack even”];

 

//找到jack并且删除

NSRange jackRange;

jackRange = [friends rangeOfString: @”jack”];

jackRange.length++; //eat the space that follows

[friends deleteCharactersInRange: jackRange];



你可能感兴趣的:(Foundation中的NSMutableString与NSString)