前言
Objective-c中有两种字符串,NSString和NSMutable String,其中,他俩的区别是NSString是不可以改变字符序列的字符串,NSSMutableString是可以改变字符序列的字符串。
NSString字符串
oc为NSString字符串提供了大量的方法,他的主要功能如下:
如何创建NSString对象
在oc中创建NSString对象的方式有很多种,下面列举几种方法。
- 直接利用@“”赋值给NSString对象
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString* str = @"欢迎来到对抗路!";
NSLog(@"%@" , str);
}
return 0;
}
2.利用NSString自己提供的初始化方法。
代码如下:
NSString* str1 = [[NSString alloc] initWithFormat:@"欢迎来到对抗路!"];
这两种是最简单的方法,还有一些其他方法,例如将c风格的字符串转化为NSString对象,利用 Unicode数组转换字符串等等,这里就简单举两个例子
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
unichar data[6] = {97, 98, 99, 101, 102, 103};
// 使用Unicode数值数组初始化字符串
NSString* str = [[NSString alloc] initWithCharacters:data length:6];
NSLog(@"%@" , str);
char *cstr = "hello, iOS!";
// 将C风格的字符串转化为NSString对象
NSString* str2 = [NSString stringWithUTF8String:cstr];
NSLog(@"%@" , str2);
}
return 0;
}
NSString的常用功能
一些基本的方法如下,详情在代码中注释。
//
// main.m
// NStry
//
// Created by 差不多先生 on 2021/6/5.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString* str = @"Hello";
NSString* book = @"高等数学";
// 方法一:在str后面追加字符串
// 原来的字符串对象不改变,只是将新生成的字符串赋给str指针变量
str = [str stringByAppendingString:@",iOS!"];
NSLog(@"%@" , str);
// 方法二转化为c风格字符串
const char *qq = [str UTF8String];
NSLog(@"获取的c字符串为: %s" , qq);
// 方法三:追加带变量的字符串
str = [str stringByAppendingFormat:@"%@是一本非常不错的书." , book];
NSLog(@"%@" , str);
// 方法四:获取字符的个数
NSLog(@"str的字符个数为:%lu" , [str length]);
// 方法五:将字符串转化为大写
str = [str uppercaseString];
NSLog(@"%@" , str);
}
return 0;
}
NSString字符串的一大便利之处,就是可以截取从任意位置开始到任意位置结束的字符串,代码实现如下所示:
//获取前n个字符组成的字符串这里是10
NSString* s1 = [str substringToIndex:10];
//获取str从第n个字符开始,与后面所有字符组成的字符串
NSString* s2 = [str substringWithRange:NSMakeRange(5, 15)];
//获取从当前开始与之后所有的字符
NSString* s3 = [str substringFromIndex:5];
// 获取iOS在str的位置
NSRange pos = [str rangeOfString:@"iOS"];
NSLog(@"iOS出现的位置:%ld, 长度为:%ld" , pos.location , pos.length);
代码中的NSRange是一个结构体,有两个变量,分别代表了起始位置和长度,OC提供了NSMakeRange()函数来创建这个结构体。
最后是NSString字符串的三种类型:
__NSCFConstString(常量字符串)
编译时常量,存储在常量池
1.@” “;
2.stringWithString 会出现警告,等同与方法一
3.CFSTR”…”
__NSCFString:
运行时创建的字符串。
存储在堆
NSString的一些方法,例如stringWithFormat:。
字母长度>9
特殊字符(ansii 之外)
汉字
字母含 q >7
__NSTaggedPointerString
将指针变量的内容放在了指针变量的内存地址中
其余情况。