Objective-C里核心的处理字符串的类就是NSString和 NSMutableString这两个类,这两个类完成了Objective-C中字符串大部分功能的处理。这两个类的最主要的区别是NSString创 建赋值后不能动态修改长度和内容,除非给重新赋值。而NSMutableString类似与链表的,在创建赋值后可以进行修改长度,插入,删除等操作。

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] address:0x10485b478

2012-07-30 09:36:41.339 objectiveC[613:403] address: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] 字符串相同

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的更多相关文章

  1. Objective-C语法之字符串NSString去掉前后空格或回车符(可以是NSCharacterSet类型的其它字符)

    main.m #import <Foundation/Foundation.h> #import "NSString+Trim.h" int main(int argc ...

  2. Objective-C: 字符串NSString与NSMutableString

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

  3. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  4. OC字符串NSString

    ========================== 面向对象编程进阶和字符串 ========================== Δ一.类的设计模式—单例 [单例]程序允许过程中,有且仅有一块内存 ...

  5. 14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString

    OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正.感谢! NSString是一个不可变长度的字符串对象.表示它初始化以后,你不能改变该变量所分配的内存中的 ...

  6. OC之字符串 NSString与NSMutableString

    一.NSString 不可变字符串的操作1)将字符串常量对象直接赋值给字符串引用 NSString *str1=@"hello"; 字符串对象的输出格式:NSLog(@" ...

  7. ios 常用字符串NSString的操作

    //将NSData转化为NSString        NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8S ...

  8. iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转

    iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转 1. 字典转Json字符串 // 字典转json字符串方法 -(NSString *)convertToJs ...

  9. 字符串(NSString)及常见字符串处理函数

    从本系列文章的开始,我们就使用过字符串对象,但是我们却还没有比较详细的介绍过它.使用@符,再一对双引号将一组字符串引用起来,例如: @”In fact, Objective-C is very sim ...

随机推荐

  1. configure new Linux/Mac

    vim   http://www.cnblogs.com/wswang/p/5088078.html sublime   http://jingyan.baidu.com/article/3aed63 ...

  2. GPIO实验(二)

    =============第三个实验============用c语言轮流点亮3个LED=================== 1.crt0.S.text.global _start_start:    ...

  3. shell学习笔记之变量(一)

    一.普通变量 1.使用变量之前通常并不需要事先声明,通常赋值的时候创建他们2.默认所有的变量都被看做字符串,并且以字符串存储3.变量区分大小写4.变量名前面添加$符号来访问变量,赋值的时候只需要使用变 ...

  4. C10K问题及解决方案

    转载自:http://blog.csdn.net/wangtaomtk/article/details/51811011 1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个 ...

  5. hdu26道动态规划总结

    前言:我们队的dp一直是我在做,说不上做的很顺,有些可以做,有些不能做.到现在为止,做dp题目也有七八十道了,除了背包问题的题目我可以说有百分之七八十的把握ac的话,其他类型的dp,还真没有多大把握. ...

  6. 略过ftp利用samba共享

    开发阶段每次通过ftp上传代码到服务器是件麻烦事,而且有时候一些小错误直接通过ftp在服务器上修改后,容易忘记在本地保存. 于是想到了网络共享,windows上直接挂载网络硬盘,这样就可以略过ftp了 ...

  7. 关于Java开发过程中质量提升-2自动化

    开发人员写代码过程中就实现自动代码检视,编辑器会提示编码规范错误,并给出正确实例,写完代码只需要提交到SVN库,然后启动自动化构建(可配置代码提交SVN后自动触发),测试环境中的项目马上和当前SVN库 ...

  8. 【C#】访问泛型中的List列表数据

    光看标题的确不好说明问题,下面描述一下问题场景: 已知后端自定义的返回的Json数据结构如下: response: { "message": "返回成功", & ...

  9. C语言 · 提货单(P1101)

    算法训练 P1101   时间限制:1.0s   内存限制:256.0MB      有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项 ...

  10. JAVA里使用CKEditor和CKFinder的配置

    在JSP里使用CKEditor和CKFinder的配置 CKEditor的编辑器工具栏中有一项“图片域”,该工具可以贴上图片地址来在文本编辑器中加入图片,但是没有图片上传. “预览”中有一大堆鸟语,看 ...