`

Objective-C语法之字符串NSString .

    博客分类:
  • oc
 
阅读更多
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。








分享到:
评论

相关推荐

    Object-C字符串

    Objective-C中的字符串类型是NSString类的实例。NSString类提供了丰富的方法和属性,用于处理字符串的创建、操作和格式化。 以下是Objective-C中创建和操作字符串的一些常见方法: 创建字符串: NSString *str1 = ...

    Objective-C中字符串操作总结

    是iOS开发中Objective-C语言基础的NSString操作的总结性文档,里面包含了NSString操作的大部分方法

    Objective-C中字符串NSString的常用操作方法总结

    主要介绍了Objective-C中字符串NSString的常用操作方法总结,Objective-C中NSString和NSMutableString这两个类下包含了操作字符串的大多数方法,需要的朋友可以参考下

    Objective-C开发工具包ytoolkit.zip

    ytoolkit 是 Objective-C 的一个常用开发工具包,包括: 一个快速的base64编码(纯C,及NSData/NSString的category),可以看项目页面的README和代码库里的benchmark,或者在ytoolkitdemo里跑profile一个cocoa附加...

    Objective-C中NSString的各种用法

    Objective-C语言有关NSString的各种用法(创建、截取、判断比较、转化数据类型、拼接、替换…)

    Objective-C开发范例代码大全

    ● 使用字符串、数字与对象集合 ● 使用NSArray、NSString、NSData等Foundation类 ● 使用线程、多核处理与异步处理 ● 构建使用了日期、定时器与内存管理的应用 ● 如何在其他平台上使用Objective-C  凭借深入的...

    Objective-C封装字符串存储操作示例

    Objective-C简单封装 字符串的存储操作,省去中间沙盒处理方式 代码如下:/存储publickey和sessionID — writeContent: nil - 仅取出数据, 其他 - 修改原内容并提取+(NSString *)storeFile:(NSString *)fileName...

    Objective-C中字符串的拼接方法小结

    主要介绍了Objective-C中字符串的拼接方法小结,除了依靠NSString,文中还介绍了在宏里拼接字符串的方法,需要的朋友可以参考下

    NSString+Hash(Objective-C)

    Objective-C 中 NSString 关于常见 Hash 算法的分类,能对字符串,文件进行 Hash 运算,具备 HMAC 功能。支持的 Hash 算法有:MD5、SHA1、SHA256、SHA512。

    Objective-C单元测试框架Cedar.zip

    Cedar 是 Objective-C 上 BDD 风格的单元测试框架。describe(@"Example specs on NSString", ^{  it(@"lowercaseString returns a new string with everything in lower case", ^{  [@"FOOBar" ...

    Object-c 语法快速入门

    ”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写. 在需要NSString的地方才需要这个转化,例如NSLog里面. 在需要C string的地方,还是用”字符串”的. 另外,@”"这个转换是不支持中文的.例如NSLog(@”...

    word源码java-ocprjs:这是一个基于Objective-C语言的基础案例集。旨在用于给初学者快速了解Objective-C语言的语

    旨在用于给初学者快速了解Objective-C语言的语法。 注:以下将Objective-C简称OC XCode Objective-C git github 问答 Objective-C干什么用? 主要是用于IOS设备和MACOS应用程序的开发语言 案例集面向谁? 主要是面对...

    Google Objective-C Style Guide 中文版

    Google Objective-C Style Guide 中文版 目录 例子 空格与格式 空格与制表符 行宽 方法声明与定义 方法调用 @public与@private 异常 协议 命名 文件名 Objective-C++ 类名 分类名 Objective-C方法名 变量名 注释 ...

    Python访问Objective-C类库Pyobjus.zip

    pyobjus 模块可以让你在 Python 中访问 Objective-C 的类。使用 Objective-C 的运行时反射技术。示例代码:from pyobjus import ObjcClass, ObjcMethod, MetaObjcClass class NSString(ObjcClass):  __objc...

    Objective-c对象组装XML

    [map setObject:@"c" forKey:@"content"]; 或者 NSMutableArray *list = [[NSMutableArray alloc]init]; NSMutableDictionary *map1 = [[NSMutableDictionary alloc]init]; [map1 setObject:@"a1" forKey:@...

    Objective-C中使用NSString类操作字符串的方法小结

    一、字符串切割 1、带节点的字符串,如@”讨厌的节点 &lt;/p&gt;”我们只想要中间.../*此处将不想要的字符全部放进characterSet1中,不需另外加逗号或空格之类的,除非字符串中有你想要去除的空格,此处”];   // 将stri

    Objective-C学习心得

    Objective-C学习心得初学objective-c,自己写的一个demo,有不足之处请指正: 效果图:

Global site tag (gtag.js) - Google Analytics