Objective-C里核心的处理字符串的类就是NSString和NSMutableString这两个类,这两个类完成了Objective-C中字符串大部分功能的处理。这两个类的最主要的区别是NSString创建赋值后不能动态修改长度和内容,除非给重新赋值。而NSMutableString类似与链表的,在创建赋值后可以进行修改长度,插入,删除等操作。
注:以下代码运行环境是:XCode 4.3.2 ,IOS 5.1。
NSString提供了许多创建和初始化新字符串的方法。下面这个是创建常量字符串的。 它是编译到可执行文件中的NSString的实例,它不会在内存中消失。例子:
1、创建常量字符串。
NSString *astring = @"我是字符串";
2、NSString的内存地址
当我们声明一个字符串时,NSString *aString;
变量aString并不是真正包含一个字符串对象,它是指向内存中字符串对象的指针,我们称之为对象标识符,因为它是表示内存中的一个对象而不是保存这个对象,指针是一个内存位置的地址,下面考虑用“==”来比较字符串,来看个例子
NSString *string1 = @"我是甲一号";
NSString *string2 = @"我是甲一号";
BOOL result = string1==string2;
if(result){
NSLog(@"address:%p", string1);
NSLog(@"address:%p", string2);
}
运行打印结果:
2012-07-30 09:36:41.337 objectiveC[613:403] yiyang:0x10485b478
2012-07-30 09:36:41.339 objectiveC[613:403] yiyang:0x10485b478
说明result的值是YES,这里对比的是内存地址,@"我是甲一号"存储在文字常量区,string1和string2都指向这个字符串,所以指向的是同一个地址。
如果这样做
NSString *string1 = @"我是甲一号";
NSString *string2 = string1;
BOOL result = string1==string2;
这时候result的值也YES了
看个例子就明白了。下面是字符串内存地址的例子
//内存指向
NSString *bstring = @"我是字符串";
NSString *astring = [[NSString alloc] init];
NSLog(@"astring point address:0x%.8x", astring);
NSLog(@"bstring point address:0x%.8x", bstring);
astring=@"我是字符串";
NSLog(@"重新赋值之后的astring point address:0x%.8x", astring);
NSLog(@"astring:%@",astring);
打印结果如下:
2012-06-14 11:35:31.226 NSString[2316:f803] astring point address:0x00b72a7c
2012-06-14 11:35:31.227 NSString[2316:f803] bstring point address:0x000045bc
2012-06-14 11:35:31.227 NSString[2316:f803] 重新赋值之后的astring point address:0x000045bc
2012-06-14 11:35:31.227 NSString[2316:f803] astring:我是字符串
重新赋值后,astring 的地址和bstring地址一样了。
3、NSString字符串的比较
在NSString中,最直接的就是用isEqualTostring这个方法
NSString* string1 = @"我是甲一号";
NSString *string2 = @"我是甲一号";
BOOL result = [string1 isEqualToString:string2];
if (result) {
NSLog(@"字符串相同");
}
打印结果:
2012-06-14 11:49:10.442 NSString[2481:f803] 字符串相同
另外一个比较的方法:compare,他可以比较字符串的大小,它的返回类型是:NSOrderedAscending,NSorderedSame,NSorderedDescending(分别等于整数-1,0,1)。
NSString* string1 = @"我是甲一号";
NSString *string2 = @"我是甲一号";
BOOL result = [string1 compare:string2];
if (result == NSOrderedSame) {
NSLog(@"字符串相同");
}
4、字符串分割:
NSString *nstring = @"美国,加拿大,澳大利亚,津巴布韦,埃及";
NSArray *array = [nstring componentsSeparatedByString:@","];
for (int i = 0; i < [array count]; i++) {
NSLog(@"string:%@", [array objectAtIndex:i]);
}
结果:
2012-06-14 11:49:10.443 NSString[2481:f803] string:美国
2012-06-14 11:49:10.443 NSString[2481:f803] string:加拿大
2012-06-14 11:49:10.443 NSString[2481:f803] string:澳大利亚
2012-06-14 11:49:10.443 NSString[2481:f803] string:津巴布韦
2012-06-14 11:49:10.444 NSString[2481:f803] string:埃及
5、创建格式化字符串
int a = 100;
int b = 8;
NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%d.这是第 %i 字符串",a,b]];
NSLog(@"astring:%@",astring);
格式化输出的符号
%@ 对象
%d, %i 整数
%u 无符整形
%f 浮点/双字
%x, %X 二进制整数
%o 八进制整数
%zu size_t
%p 指针
%e 浮点/双字 (科学计算)
%g 浮点/双字
%s C 字符串
%.*s Pascal字符串
%c 字符
%C unichar
%lld 64位长整数(long long)
%llu 无符64位长整数
%Lf 64位双字
%e 是实数,用科学计数法计的
6、用标准c创建字符串:initWithUTF8String方法
char *Cstring = "我是字符串";
NSString *astring = [[NSString alloc] initWithUTF8String:Cstring];
NSLog(@"astring:%@",astring);
结果:2012-06-14 13:47:23.956 NSString[2850:f803] astring:我是字符串
7、在串中搜索子串和替换
hasPrefixe 匹配字符串头
haSuffix 匹配字符串的尾巴
NSString *string1 = @"卡拉是条狗";
NSString *string2 = @"狗狗叫卡拉";
//字符串以开头比较
if([string1 hasPrefix:@"卡拉"])
{
NSLog(@"字符串string1以卡拉开头");
}
//字符串以结尾比较
if([string2 hasSuffix:@"卡拉"])
{
NSLog(@"string2字符串以卡拉结尾");
}
搜索和替换
NSString *string = @"我们是 gong产 主义 接班人";
NSString *temp = @"gong产";
NSString *me = @"我";
NSRange rang = [string rangeOfString:temp];
NSRange rang1 = [string rangeOfString:me];
NSLog(@"搜索的字符串在string中起始点的index 为 %d", rang.location);
NSLog(@"搜索的字符串在string中结束点的index 为 %d", rang.location + rang.length);
NSLog(@"我 在字符串 string中的起点的index 为 %d",rang1.location);
//将搜索中的字符串替换成为一个新的字符串
NSString *str = [string stringByReplacingCharactersInRange:rang withString:@"大产"];
NSLog(@"替换后字符串为%@", str);
//将字符串中" " 全部替换成 *
str = [string stringByReplacingOccurrencesOfString :@" " withString:@"*"];
NSLog(@"替换后字符串为%@", str);
结果:
2012-06-14 14:07:44.762 NSString[3107:f803] 搜索的字符串在string中起始点的index 为 4
2012-06-14 14:07:44.764 NSString[3107:f803] 搜索的字符串在string中结束点的index 为 9
2012-06-14 14:07:44.764 NSString[3107:f803] 我 在字符串 string中的起点的index 为 0
2012-06-14 14:07:44.765 NSString[3107:f803] 替换后字符串为我们是 大产 主义 接班人
2012-06-14 14:07:44.765 NSString[3107:f803] 替换后字符串为我们是*gong产*主义*接班人
看到"我"字的index了吗?第一位的索引值是0。
分享到:
相关推荐
- Objective-C提供了丰富的字符串处理功能,可以通过`NSString`类来操作字符串。 - 示例: ```objective-c NSString *str1 = @"Hello, "; NSString *str2 = @"World!"; NSString *greeting = [str1 ...
- `NSString`: 字符串处理类。 - `NSInteger`: 整型数据类型。 - `NSURL`: URL处理类。 - `NSImage`: 图像处理类。 - 使用`NSLog`的一个例子: ```objective-c NSLog(@"%d", myInt); ``` - 除了`NS`前缀外...
3. NS****:这是NextStep时代的遗留,NS是NextStep的缩写,后续被Apple采用,作为其框架中类名的前缀,例如NSLog用于日志输出,NSString表示字符串类型,NSInteger是整数类型,NSURL代表URL对象,NSImage表示图像...
- 字符串类型:使用`NSString *`来声明字符串指针。 - 数组类型:可以使用`NSArray *`声明数组指针。 - 字典类型:可以使用`NSDictionary *`声明字典指针。 ##### 3. 变量定义 变量用于存储数据。在Objective-C中,...
15. **第15章:数字、字符串和集合** - 讲解了如何处理数字、字符串和集合数据类型。 16. **第16章:文件操作** - 解释了如何读写文件以及与文件系统交互的方法。 17. **第17章:内存管理和自动引用计数** - 详细...
上述代码中,`stringWithString:`是一个类方法,用于创建一个包含特定字符串的`NSString`对象。 总的来说,Objective-C是一门历史悠久、功能强大的编程语言,它具有一套完整的面向对象编程机制和消息传递机制。对于...
- `NSString`:用于处理字符串。 - `NSInteger`:表示整型变量。 #### 三、Objective-C的关键语法结构 接下来,我们将更深入地探讨Objective-C的一些关键语法结构。 1. **导入文件**:Objective-C中使用`#...
1. **Objective-C核心类型**:`NSString`、`NSArray`、`NSDictionary`是Objective-C中最常用的容器类型,分别用于存储字符串、数组和字典数据。 2. **协议**:通过定义协议可以规定类应实现的方法或属性,增强了程序...
最后,Objective-C的Foundation框架提供了许多基础数据类型和常用功能,如字符串(NSString)、数组(NSArray)和字典(NSDictionary)。UIKit(在iOS中)和AppKit(在macOS中)则提供了构建用户界面的工具。 这份...
3. **Foundation框架**:Objective-C的基础库,提供了一系列用于处理基本数据类型、集合、字符串、内存管理和系统服务的类。学习Objective-C时,必须熟悉NSArray、NSDictionary、NSString等常用类。 4. **Cocoa ...
**Objective-C**是一种面向对象的编程语言,它建立在C语言的基础之上,并且是C语言的一个超集。这意味着您可以在Objective-C中直接使用C语言的所有特性。Objective-C最初是由Brad J. Cox在20世纪80年代早期设计的,...
- **字符串处理**:Objective-C倾向于使用Foundation框架中的`NSString`类型来处理字符串,该类型支持Unicode编码和格式化工具,以`@`符号开头的字符串形式增强文本处理能力。 - **类与方法**:Objective-C通过接口...
作为C语言的超集,Objective-C同样支持C语言中的字符串表示方式。单个字符使用单引号,字符串则使用双引号。然而,在Objective-C框架中,通常不使用C风格的字符串,而是采用`NSString`对象。`NSString`为字符串提供...
1. **Objective-C基础**:Objective-C的语法与C语言非常相似,但增加了许多面向对象的特性。它引入了"@"符号来标识字符串和消息,以及"#import"来包含头文件。Objective-C的关键字如"class"、"interface"、...