OC Foundation框架 字符串

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC Foundation框架 字符串相关的知识,希望对你有一定的参考价值。

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

创建字符串

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

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

示例:

#import <Foundation/Foundation.h>

int main(int argc, const 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, Billy!";
        //将C风格的字符串转换为NSString对象
        NSString* str2 = [NSString stringWithUTF8String: cstr];
        NSLog(@"%@", str2);
        //将字符串写入指定文件
        [str2 writeToFile:@"NSStringTest.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
        //读取文件内容,用文件内容初始化字符串
        NSString* str3 = [NSString stringWithContentsOfFile:@"NSStringTest.txt" encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@", str3);
    }
    return 0;
}

NSString的常用功能

此处用一个示例程序介绍NSString的用法:

#import <Foundation/Foundation.h>

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

上面程序示范了NSString的常用方法的用法。
输出:

Hello,bro!
获取的C字符串:Hello,bro!
Hello,bro!Billy is a bad boy.哈哈
str的字符个数为:31
str按UTF-8字符集解码后的字节数为:35
Hello,bro!
bro!Billy is a bad boy.哈哈
bro!Billy is a
开始位置:10,长度为:5
HELLO,BRO!BILLY IS A BAD BOY.哈哈

可变字符串(NSMutableString)

NSString类是不可变的类,NSString创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
NSMutableString对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,所以前面NSString的方法它都可以直接使用,NSMutableString对象也可以直接当成NSString对象使用。
当一个NSMutableString对象被创建后,通过NSMutableString提供的方法即可改变该字符串所包含的字符序列。
示例:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString* name = @"Billy";
        //创建一个NSMutableString对象
        NSMutableString* str = [NSMutableString stringWithString: @"Hello"];
        //追加固定字符串
        //字符串所包含的字符序列本身发生了改变,因此无须重新赋值
        [str appendString: @",hhh!"];
        NSLog(@"%@", str);
        //追加带变量的字符串
        //字符串所包含的字符序列本身发生了改变,因此无须重新赋值
        [str appendFormat: @"%@ is a bad boy.哈哈", name];
        NSLog(@"%@", str);
        //在指定位置插入字符串
        //字符串所包含的字符序列本身发生了改变,因此无须重新赋值
        [str insertString: @"hhh.哈哈哈" atIndex: 6];
        NSLog(@"%@",str);
        //删除从位置6开始、长度为11的所有字符
        [str deleteCharactersInRange: NSMakeRange(6, 11)];
        NSLog(@"%@",str);
        //将从位置6开始、长度为9的所有字符替换成Objective-C
        [str replaceCharactersInRange:NSMakeRange(6, 9) withString:@"Objective-C"];
        NSLog(@"%@",str);
    }
    return 0;
}

输出:

Hello,hhh!
Hello,hhh!Billy is a bad boy.哈哈
Hello,hhh.哈哈哈hhh!Billy is a bad boy.哈哈
Hello,Billy is a bad boy.哈哈
Hello,Objective-Ca bad boy.哈哈

以上是关于OC Foundation框架 字符串的主要内容,如果未能解决你的问题,请参考以下文章

oc67--NSString1

OC_框架学习第一天

Foundation框架系列-NSString

34-oc Foundation简介

OC 知识:Foundation 框架及相关类详尽总结

Foundation框架—字符串