字符串对象(3)

来源:互联网 发布:网络推广年度工作总结 编辑:程序博客网 时间:2024/05/17 03:58

NSMutavleString类可以用来创建可以更改的字符串对象。因为是NSString类的子类,所以可以使用NSString类的所有方法

任何一个可变与不可变的字符串对象在程序执行期间,总可以被设为完全不同的字符串对象。例如:

str1 = @“This is a string”;

...

str1 = [str1 substringFromIndex: 5];

在这个例子中,str1可以声明为可变的字符串对象,也可以声明为不可变的字符串对象。

以下有一些处理可变字符串的方法:

#import <Foundation/Foundation.h>

int main ()

{

    @autoreleasepool {

        NSString *str1 =@"this is string A";

        NSString *search,*replace;

        NSRange substr; //这里没有星号不是引用

        NSMutableString *mstr;

        //从不可变字符串创建可变字符串

        mstr = [NSMutableStringstringWithString: str1];

        NSLog(@"%@",mstr);

        //插入字符

        [mstr insertString:@" mutable"atIndex:7];

        NSLog(@"%@",mstr);

        //插入末尾进行有效拼接

        [mstr insertString:@" and string B"atIndex: [mstrlength]];

        NSLog(@"%@",mstr);

        //直接使用appendString

        [mstr appendString:@" and string C"];

        NSLog(@"%@",mstr);

        //查找然后将其删除

        substr = [mstr rangeOfString:@"string B and "];

        if(substr.location !=NSNotFound)

        {

            [mstr deleteCharactersInRange:substr];

            NSLog(@"%@",mstr);

        }

        //直接设置为可变字符串

        [mstr setString:@"This is string A"];

        NSLog(@"%@",mstr);

        //替换一些字符

        [mstr replaceCharactersInRange:NSMakeRange(8,8)withString:@"a mutable string"];

        NSLog(@"%@",mstr);

        //查找替换

        search = @"this is";

        replace = @"An example of";

        substr = [mstr rangeOfString:search];

        if(substr.location !=NSNotFound)

        {

            [mstr replaceCharactersInRange:substrwithString:replace];

            NSLog(@"%@",mstr);

        }

        //查找和替换所有的匹配项

        search = @"a";

        replace =@"X";

        substr = [mstr rangeOfString: search];

        while(substr.location !=NSNotFound)

        {

            [mstr replaceCharactersInRange:substrwithString:replace];

            substr = [mstr rangeOfString:search];

        }

        NSLog(@"%@",mstr);

        

    }

    return 0;

}

运行结果:

2014-08-24 15:46:20.585 testOC[512:303] this is string A

2014-08-24 15:46:20.586 testOC[512:303] this is mutable string A

2014-08-24 15:46:20.587 testOC[512:303] this is mutable string A and string B

2014-08-24 15:46:20.587 testOC[512:303] this is mutable string A and string B and string C

2014-08-24 15:46:20.588 testOC[512:303] this is mutable string A and string C

2014-08-24 15:46:20.588 testOC[512:303] This is string A

2014-08-24 15:46:20.589 testOC[512:303] This is a mutable string

2014-08-24 15:46:20.589 testOC[512:303] This is X mutXble string

Program ended with exit code: 0

声明

NSMutableString *mstr;

用来存储在程序执行过程中值可能更改的字符串对象。

mstr = [NSMutableString stringWithString: str1];

将stringWithString:方法发送给NSMutableString类时,返回一个可变的字符串对象。而将stringWithString:方法发送给NString时,返回一个不可变的字符串对象。

insertString:atIndex:方法将指定的字符串插入接受者,插入点从指定的索引值开始。与不可变字符串对象不同的是,这里没有返回值,因为被修改的是接受者。它是可变字符串对象,所以可以这么做。

第二个insertString:atIndex:调用length方法将一个字符串插入另一个字符串结尾。appendString:可以使这个任务更简单一些。

使用deleteCharactersInRange:方法可以删除字符串中指定数目的字符,对于以下字符串:

This is mutable string A and string B and string C

应用范围{16,13},从索引数16(或者字符串中 的地17个字符)开始删除13个字符“string A and“,如图:


setString:方法可以使用来设置可变字符串对象的内容,可以用来初始化对象。

replaceCharactersInRange:withString:方法可以用另一个字符串替换这个字符串中的部分内容。字符串大小不必相同,可以使用大小相等或不等的字符串替换另一个字符串。

在最后设置一个循环说明如何实现“查找并全部替换”的操作。搜索字符串被设置为@“a”,替换字符串被设置为@“X”,注意,如果替换字符串中还包括搜索字符串(例如:考虑使用字符串@“aX”替换@“X”),那么将陷入死循环。其次,如果替换字符串为空(也就是不包含字符),那么将有效地删除所有搜索到的字符串。没有空格隔开的相邻引号可指定为空的常量字符串,例如:

replace = @““;

最后,NSMutableString类还包含一个名为replaceOccurrencesOfString:withString:options:range:的方法,可以用来执行搜索并全部替换的操作。其实,上面代码中的while循环可以用如下代码代替:

[mstr  replaceOccurrencesOfString:search withString:replace options:nil range:NSMakeRange(0,[mstr length]) ];

这会得到相同的结果,而且可以避免潜在的无限循环。

常见的NSString方法:



常见的NSMutableString方法:


如果需要把字符串分解为语言符号,可以查看Foundation的NSScanner类。

在以上的表格中,url是NSURL对象,path是指明文件路径的NString对象,nsstring是一个NSString对象,i 表示字符串中有效字符数的NSUInteger值,enc指明字符编码的NSStringEncoding对象,err是描述所发生错误的NSError对象,size和opts是NSUinteger,range是指明字符串中有效范围的对象。

0 0
原创粉丝点击