Objective-C: 字符串NSString与NSMutableString

 

      字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就与其他我们常用的编程语言不尽相同。

       这里总结一下字符串NSString与NSMutableString。

一. NSString

      NSString代表字符序列不可变的字符串,NSString的功能非常强大,OC的字符串处理比C语言的饿字符串简单、易用得多。

      这里我们通过一个具体的例子来进行分析。

      创建两个字符串对象: 

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

NSString *str2 = @"this is string B";

      计算字符串中的字符个数

NSLog(@"Length of str1 : %lu" , [str1 length]);

     利用stringWithString 将一个字符串复制到另一个字符串:

res = [NSString stringWithString : str1];

NSLog(@"copy : %@" , res);

     stringByAppendingString,将一个字符串复制到另一个字符串的末尾:

str2 = [str1 stringByAppendingString:str2];

      isEqualToNumber : 方法比较两个NSNumber对象的数值。程序会返回一个BOOL值,查看这两个值是否相等。

      isEqualToString,判断两个字符串是否相等:

if([str1 isEqualToString: res] == YES)

            NSLog(@"str1 == res");

else

            NSLog(@"str1 != res");

     compare : 方法测试一个值是否在数值上小于、等于或大于另一个值。
      如: [intNumber compare : myNumber]
      若intNumber 小于 myNumber ,返回NSOrderedAscending ;
                           相等                    ,返回NSOrderdSame;
                           大于                    ,返回NSOrderdDescending

       //验证一个字符串是否小于、等于或大于另一个字符串

        compareResult = [str1 compare: str2];

        

        if(compareResult == NSOrderedAscending)

            NSLog(@"str1 < str2");

        else if(compareResult == NSOrderedSame)

            NSLog(@"str1 == str2");

        else

            NSLog(@"str1 > str2");

        uppercaseString,将字符串转换为大写。

        lowercaseString,将字符串转换为小写。

        //将字符串转换为大写

        res = [str1 uppercaseString];

        

        //将字符串转换为小写

        res = [str1 lowercaseString];

       

示例代码如下:

Objective-C: 字符串NSString与NSMutableString
 1 //

 2 //  main.m

 3 //  stringTest

 4 //

 5 //  Created by heyonggang on 13-12-4.

 6 //  Copyright (c) 2013年 MiracleHe. All rights reserved.

 7 //  基本的字符串操作

 8 

 9 #import <Foundation/Foundation.h>

10 

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

12 {

13 

14     @autoreleasepool {

15         

16         // insert code here...

17         //NSLog(@"Hello, World!");

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

19         NSString *str2 = @"this is string B";

20         NSString *res;

21         NSComparisonResult compareResult;

22         

23         //计算字符串中的字符

24         NSLog(@"Length of str1 : %lu" , [str1 length]);

25         

26         //将一个字符串复制到另一个字符串

27         res = [NSString stringWithString : str1];

28         NSLog(@"copy : %@" , res);

29         

30         //将一个字符串复制到另一个字符串的末尾

31         str2 = [str1 stringByAppendingString:str2];

32         NSLog(@"concatentation: %@" , str2);

33         

34         //验证两个字符串是否相等

35         if([str1 isEqualToString: res] == YES)

36             NSLog(@"str1 == res");

37         else

38             NSLog(@"str1 != res");

39         

40         //验证一个字符串是否小于、等于或大于另一个字符串

41         compareResult = [str1 compare: str2];

42         

43         if(compareResult == NSOrderedAscending)

44             NSLog(@"str1 < str2");

45         else if(compareResult == NSOrderedSame)

46             NSLog(@"str1 == str2");

47         else

48             NSLog(@"str1 > str2");

49         

50         //将字符串转换为大写

51         res = [str1 uppercaseString];

52         NSLog(@"uppercase conversion : %s" , [res UTF8String]);

53         

54         //将字符串转换为小写

55         res = [str1 lowercaseString];

56         NSLog(@"lowercase conversion : %@" , res);

57         

58         NSLog(@"original string : %@" , str1);       

59     }

60     return 0;

61 }
代码清单

       stringByAppendingString,在字符串后面添加固定的字符串:

str = [str stringByAppendingString:@", iOS!"];

       substringToIndex,获取str的前10个字符组成的字符串:

substringToIndex:方法创建了一个子字符串,包括首字符都指定的索引数,但不包括这个字符。因为索引数是从0开始的,所以参数3表示从字符串中提取0、1、2,并返回结果字符串对象。对于所有采用索引数作为参数的字符串方法,如果提供的索引数对该字符串无效,就会获得Range or index out of bounds的出错信息。

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

        NSString *s1 = [str substringToIndex:10];

        NSLog(@"%@" , s1);

      substringFromIndex,获取str从第5个字符开始,与后面字符组成的字符串:

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

        NSString *s2 = [str substringFromIndex:5];

        NSLog(@"%@" , s2);

      获取str从第5个字符开始,到第15个字符组成的字符串:

        //获取str从第5个字符开始,到第15个字符组成的字符串

        NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)];

        NSLog(@"%@" , s3);

      rangeOfString , 获取ios在str中出现的位置:

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

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

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

示例代码如下:

Objective-C: 字符串NSString与NSMutableString
 1 #import <Foundation/Foundation.h>

 2 

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

 4 {

 5 

 6     @autoreleasepool {

 7         

 8         NSString *str = @"Hello ";

 9         NSString *book = @"我要学好iOS";

10         

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

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

13         str = [str stringByAppendingString:@", iOS!"];

14         NSLog(@"%@" , str);

15         

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

17         const char *cstr = [str UTF8String];

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

19         

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

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

22         str = [str stringByAppendingFormat:@"%@是非常重要的事情。" , book];

23         NSLog(@"%@" , str);

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

25         

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

27         NSString *s1 = [str substringToIndex:10];

28         NSLog(@"%@" , s1);

29         

30         //获取str从第5个字符开始,与后面字符组成的字符串

31         NSString *s2 = [str substringFromIndex:5];

32         NSLog(@"%@" , s2);

33         

34         //获取str从第5个字符开始,到第15个字符组成的字符串

35         NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)];

36         NSLog(@"%@" , s3);

37         

38         //获取iOS在str中出现的位置

39         NSRange pos = [str rangeOfString:@"iOS"];

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

41         

42     }

43     return 0;

44 }
代码清单

 

二. NSMutableString

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

      stringWithString,用不可变字符串创建可变字符串:

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

        mstr = [NSMutableString stringWithString:str1];

        NSLog(@"%@" , mstr);

       insertString,插入字符:

        //插入字符

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

        NSLog(@"%@" , mstr);

      insertString:  atIndex:   ,插入末尾进行有效拼接:

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

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

        NSLog(@"%@" , mstr);

      deleteCharactersInRange:NSMakeRange() , 根据范围删除子字符串:

        //根据范围删除子字符串

        [mstr deleteCharactersInRange: NSMakeRange(16, 13)];

        NSLog(@"%@" , mstr);

      查找然后直接删除

        //查找然后将其删除

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

        

        if(substr.location != NSNotFound){

            [mstr deleteCharactersInRange:substr];

            NSLog(@"%@" , mstr);

        }

 示例代码如下:

 1 #import <Foundation/Foundation.h>

 2 

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

 4 {

 5 

 6     @autoreleasepool {

 7         

 8         // insert code here...

 9         //NSLog(@"Hello, World!");

10         

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

12         NSString *search , *replace;

13         NSMutableString *mstr;

14         NSRange substr;

15         

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

17         mstr = [NSMutableString stringWithString:str1];

18         NSLog(@"%@" , mstr);

19         

20         //插入字符

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

22         NSLog(@"%@" , mstr);

23         

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

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

26         NSLog(@"%@" , mstr);

27 

28         

29         //直接使用appendString

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

31         NSLog(@"%@" , mstr);

32         

33         //根据范围删除子字符串

34         [mstr deleteCharactersInRange: NSMakeRange(16, 13)];

35         NSLog(@"%@" , mstr);

36         

37         //查找然后将其删除

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

39         

40         if(substr.location != NSNotFound){

41             [mstr deleteCharactersInRange:substr];

42             NSLog(@"%@" , mstr);

43         }

44         

45         

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

47         [mstr setString:@"this is string A"];

48         NSLog(@"%@" , mstr);

49         

50         //替换一些字符

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

52         NSLog(@"%@" , mstr);

53         

54         //查找和替换

55         search = @"this is";

56         replace = @"an example of";

57         

58         substr = [mstr rangeOfString:search];

59         

60         if(substr.location != NSNotFound){

61             [mstr replaceCharactersInRange:substr withString:replace];

62             NSLog(@"%@" , mstr);

63         }

64         

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

66         search = @"a";

67         replace = @"X";

68         

69         substr = [mstr rangeOfString:search];

70         

71         while (substr.location != NSNotFound) {

72             [mstr replaceCharactersInRange:substr withString:replace];

73             

74         }

75         

76         NSLog(@"%@" , mstr);

77         

78     }

79     return 0;

80 }

 

 

 

 

你可能感兴趣的:(Objective-C)