zoukankan      html  css  js  c++  java
  • Objective-C语法之字符串NSString

    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。

  • 相关阅读:
    WRF WPS预处理
    CVS安装
    Linux窗口最小化消失,任务栏上无法找到的解决方法
    NCARG安装配置出现error while loading shared libraries: libg2c.so.0问题额解决办法
    Netcdf安装
    Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
    The leaflet package for online mapping in R(转)
    Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
    What does a Bayes factor feel like?(转)
    Weka算法介绍
  • 原文地址:https://www.cnblogs.com/hero11223/p/5647541.html
Copyright © 2011-2022 走看看