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];
       

示例代码如下:

 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);

示例代码如下:

 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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

4927 线段树练习5

时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 有n个数和5种操作...

376140
来自专栏iOS技术杂谈

iOS block探究(一): 基础详解你要知道的block都在这里

你要知道的block都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本文大纲 blo...

34880
来自专栏wOw的Android小站

[Objective-C] id类型和instancetype类型

id数据类型可以存储任何类型的对象。可以说,它是一般对象类型。 例如可以声明一个为id类型的变量:

13110
来自专栏DannyHoo的专栏

NSCharacterSet类在分割字符串中的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

11020
来自专栏函数式编程语言及工具

Scalaz(3)- 基础篇:函数概括化-Generalizing Functions

  Scalaz是个通用的函数式编程组件库。它提供的类型、函数组件都必须具有高度的概括性才能同时支持不同数据类型的操作。可以说,scalaz提供了一整套所有编程...

19990
来自专栏iOS技术杂谈

iOS @property探究(二): 深入理解你要知道的@property都在这里

你要知道的@property都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 上一篇文...

36570
来自专栏赵俊的Java专栏

合并区间

22730
来自专栏数据结构与算法

codevs4919 线段树练习4

 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 给你N个数,有两...

28950
来自专栏猿人谷

NSLog

在Objective-C中,NSLog相当于C语言中的printf,常用于文字输出。 1.NSLog定义 NSLog定义在NSObjCRuntime.h中,如下...

20480
来自专栏青玉伏案

Objective-C中的继承和多态

   面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点。OC中和Java类...

23580

扫码关注云+社区

领取腾讯云代金券