OC学习记录,字符串


字符串就是 一连串的字符序列,OC中有两个字符串:NSString和NSMutableString,其中,NSString代表序列不可变的字符串,而NSMutableString则代表序列可变的字符串。

创建字符串

参考NSString文档,NSString包含大致如下功能:

  • 创建字符串:创建字符串既可以使用init开头的实例方法,又可以使用string开头的类方法,当然也可以直接用@""的形式给出字符串直接量。
  • 读取文件或网络URL来初始化字符串。
  • 将字符串内容写入文件或URL。
  • 获取字符串长度,既可获取字符串内包含的字符个数,又可获取字符串包括的字节个数。
  • 获取字符串中的字符或字节,既可获取指定位置的字符,又可获取指定范围内的字符。
  • 获取字符串对应的C风格字符串。
  • 连接字符串。
  • 分隔字符串。
  • 查找字符串内指定的字符和子串。
  • 替换字符串。
  • 比较字符串。
  • 字符串大小比较。
  • 对字符串中的字符进行大小写转换。

实际上,NSString文档中还介绍了大量功能和方法,本书将介绍NSString最常用的功能。
下面的程序示范了创建NSString对象的几种方式。

#import<Foundation/Foundation.h>


int main(int argc, char * argv[]) {
    @autoreleasepool{
        unichar data[6] = {97,98,99,100,101,102};
        //使用Unicode数值数组初始化字符串
        NSString* str = [[NSString alloc]initWithCharacters:data length:6];
        NSLog(@"%@", str);
        char* cstr = "Hello,iOS!";
        //将c风格的字符串转换为NSString对象
        NSString* str2 = [NSString stringWithUTF8String:cstr];
        NSLog(@"%@", str2);
        //将字符串写入指定文件
        [str2 writeToFile:@"myFile.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
        //读取文件内容,用文件内容初始化字符串
        NSString* str3 = [NSString stringWithContentsOfFile:@"NSStringTest.m" encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@", str3);
    }     
    return 0;
}

上面程序中示范了3中创建NSString对象的方式,包括将一个Unicode数值数组转换为字符串,把C风格的字符串转换为NSString对象,读取文件内容初始化NSString对象等。

上面程序中还定义了一个unichar数组,该数组也是一个基本类型,就是unsigned short的别名,Objecti-C使用typedef unsigned short unichar;重新定义了unichar类型。这也是前面介绍typeof时提到的,由于支持typeof,因此Objective-C可以随心所欲地新增类型。

上面程序还调用了NSString方法将字符串内容写入底层文件。编译、运行该程序,可以看到初始化NSString的方式。由于程序使用NSString读取NSStringtTest.m程序的内容,因此运行该程序可以看到输出该程序的内容。不仅如此,程序还会将可以看到该文件的运行目录下多了一个myFile.txt文件,该文件的内容为“Hello,iOS!”。

NSString的常用功能

得到NSString字符串之后,接下来就可以调用NSString的大量功能性方法,这些方法的用法可以参考NSString的参考手册,此处以一个示例程序来介绍NSString类的用法。

#import<Foundation/Foundation.h>

int main(int argc, char * argv[]) {
    @autoreleasepool{
        NSString * str = @"Hello";
        NSString* book = @"《疯狂iOS讲义》";
        //在str后面追加固定的字符串
        //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
        str = [str stringByAppendingString:@",iOS!"];
        NSLog(@"%@", str);
        //获取字符串对应的c风格字符串
        const char* cstr = [str UTF8String];
        NSLog(@"获取的C字符串:%s", cstr);
        //在str后面追加带变量的字符串
        //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
        str = [str stringByAppendingFormat:@"%@是一本非常不错的图书。", book];
        NSLog(@"%@", str);
        NSLog(@"str的字符个数为:%lu", [str length]);
        NSLog(@"str按UTF-8字符集解码后字节数为:%lu", [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
        //获取str的前10个字符所组成的字符串
        NSString* s1 = [str substringToIndex:10];
        NSLog(@"%@", s1);
        //获取str从第5个字符开始,与后面所有字符所组成的字符串
        NSString* s2 = [str substringFromIndex:5];
        NSLog(@"%@", s2);
        //获取str从第5个字符开始,与后面15个字符所组成的字符串
        NSString* s3 = [str substringWithRange:NSMakeRange(5,15)];
        NSLog(@"%@", s3);
        //获取ios在str中出现的位置
        NSRange pos = [str rangeOfString:@"iOS"];
        NSLog(@"iOS在str中出现的开始位置:%ld,长度为:%ld",pos.location, pos.length);
        //将str的所有字符转换为大写
        str = [str uppercaseString];
        NSLog(@"%@", str);
    }
    return 0;
}

在这里插入图片描述

编译、运行该程序,可以看到以下输出:
在这里插入图片描述

可变字符串(NSMutableString)

NSString类是不可变的类,即一旦NSString对象被创建,包含在这个对象中的字符序列就是不可改变的,直至这个对象被销毁。
NSMutableString对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,因此前面介绍的NSString所包含的方法,NSMutableString都可直接使用,NSMutableString对象也可直接当成NSString对象使用。
当一个NSMutableString对象被创建以后,通过NSMutableString提供的appendFormat:、appendString:、deleteCharacterInRange:、insertString:atIndex:、replaceCharactersInRange:withString:、replaceOccurrencesOfString:withString:option:range:、setString:方法即可改变该字符串所包含的字符序列。
下面的程序示范了使用NSMutableString来改变字符序列。

#import<Foundation/Foundation.h>

int main(int argc, char * argv[]) {
    @autoreleasepool{
        NSString* book = @"《疯狂iOS讲义》";
        //创建一个NSMutableString对象
        NSMutableString* str = [NSMutableString stringWithString:@"Hello"];
        //追加固定字符串
        //字符串所包含的字符序列本身发生了改变,因此无须重新赋值
        [str appendString:@",iOS!"];
        NSLog(@"%@", str);
        //追加带变量的字符串
        //字符串所包含的字符序列本身发生了改变,因此无须重新赋值
        [str appendFormat:@"%@是一本非常不错的图书。", book];
        NSLog(@"%@", str);
        //在指定位置插入字符串
        //字符串所包含的字符序列本身发生了改变,因此无须重新赋值
        [str insertString:@"fkit.org" atIndex:6];
        NSLog(@"%@", str);
        //删除从位置6开始、长度为12的所有字符
        [str deleteCharactersInRange:NSMakeRange(6,12)];
        NSLog(@"%@", str);
        //将从位置6开始、长度为12的所有字符
        [str replaceCharactersInRange:NSMakeRange(6,9) withString: @"Objective-C"];
        NSLog(@"%@", str);
    }
    return 0;
}

上面程序调用了NSMutableString对象的方法来修改该字符串所包含的字符序列。编译、运行该程序,可以看到如下输出:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值