基本数据类型
NSRange
是一个结构体,里面有两个数据成员数据类型都为NSUInteger 就是c语言中的无符号整形,一个是location表示集合的起始地址,另外一个变量是length表示从起始地址开始算多少个元素。
NSRange的三种创建方式
//1.
NSRange range;
range.length = 10;
range.location=3;
//2.
NSRange rang1 = {1,2};
//3.
NSRange rang2 = NSMakeRange(1, 7);
NSRange的一些方法
将NSRange转化为NSString类型
//快速打印range
NSString *str = NSStringFromRange(range);
NSLog(@"%@",str);
NSPoint
NSPoint其实就是CGPoint
NSPoint创建方式
跟NSRange一样,也是三种方法
NSPoint p;
p.x = 10;
p.y = 10;
NSPoint p3 = {3,2};
NSPoint p2 = NSMakePoint(2, 3);
NSPoint的一些方法
将NSPoint转为NSString
NSString *str = NSStringFromPoint(p);
NSLog(@"%@",str);
NSSize
本质就是CGSize,NSSize就是一个结构体,两个成员高度height,宽度width
NSSize的使用
void size(){
NSSize size;
size.width = 100;
size.height = 90;
size = NSMakeSize(3, 4);
NSString *str = NSStringFromSize(size);
NSLog(@"%@",str);
}
NSRect
NSRect是一个结构体,这个结构体两个成员一个是NSPoint另外一个是NSSize;
NSRect的使用
NSRect rect;
rect.origin.x = 10;
rect.origin.y = 20;
rect.origin = NSMakePoint(10, 33);
rect.size = NSMakeSize(12, 30);
rect = NSMakeRect(10, 20, 30, 40);
NSLog(@"%@",NSStringFromRect(rect));
基本容器
NSString
与C++中String类的功能很像,NSString是OC中存储字符串类型的一种容器,但是NSString内容是不可变的
NSString 的实例的创建
动态方法创建
NSSting实例的创建有很多种方式
- 直接赋值一个字符串,此时字符串为常量字符串
- 分配空间再进行初始化,此时还没有赋值默认为nil,需要对其进行赋值操作
- 分配空间时进行有参数的构造
- 用c语言格式字符串对NSString进行初始化
- 带有格式化参数对NSString进行赋值操作
//这中方式创建是常量字符串
NSString *str1 = @"A String";
//先分配空间再进行初始化
NSString *str2 = [[NSString alloc] init];
str2 = @"A String";
//分配空间后进行带有参数的构造
NSString *str3 = [[NSString alloc] initWithString:@"A string"];
//分配空间后将char类型的的字符串转为NSString类型进行构造
NSString *str4 = [[NSString alloc] initWithUTF8String:"A string"];
str4 = [NSString stringWithUTF8String:"LOUE"];
//带有格式化参数的初始化
NSString * str5 = [[NSString alloc] initWithFormat:@"my age is %i and my height is %.2f ",19,1.22];
NSLog(@"str5 = %@",str5);
静态方法创建
除了用动态方法可以创建字符串实例外,动态方法也可以创建字符串实例。
基本就是将init替换成string,其余都基本一样
//string with开头为静态方法,作用与相应的initWith开头的动态方法一样
str3 = [NSString stringWithString:@"LOUE"];
文件操作
读取文件内容
指定字符集为UTF-8
//从文件中读取文本
NSString *path = @"/Users/bytedance/Desktop/1.txt";
NSString *str1 = [NSString stringWithContentsOfFile: path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"str1 = %@",str1);
如果想要指定字符集为GBK的话,需要进行类型的转化
写入文件内容
//将字符串导出到文件
void stringCreate3(){
NSString *str1 = @"啦啦啦啦啦啦啦";
NSString *path = @"/Users/bytedance/Desktp/1.txt";
NSError *error;
//第二参数如果是yes,则先创建一个临时文件将数据写入临时文件,如果中途出错,则不写入目标文件
//如果文件不存在则会帮忙创建
//如果文件夹布村则会报错
//覆盖掉原来文件内容
[str1 writeToFile: path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(error){
//写入失败
NSLog(@"写入失败 %@" ,[error localizedDescription]);
}else {
NSLog(@"写入成功");
}
}
NSString中的一些实例方法
大小写处理
- uppercaseString
- lowercaseString
- capitalizedString
void stringCreate4(){
NSString *str = @"GuangDong";
//转成大写
NSLog(@"大写 : %@",[str uppercaseString]);
//转成小写
NSLog(@"小写 : %@",[str lowercaseString]);
//首字母变大写,其他字母变小写
NSLog(@"is %@",[str capitalizedString]);
}
字符串比较
- isEqualToString 比较字符串内容是否相等,不忽略大小写
- 按字典顺序比较字符串compare,不忽略大小写
- caseInsensitiveCompare,忽略大小写
void stringCreate5(){
//字符串比较
//检测字符串内容是否相同
BOOL res = [@"abc" isEqualToString:@"ABc"];
NSLog(@"%i",res);
//右边比左边大为升序
//左边比右边大为降序
//一样大为相等
//按字典序比较字符串大小
//返回值为枚举类型
NSComparisonResult res1 = [@"abc"compare:@"Abc"];
if(res1 == NSOrderedSame){
NSLog(@"一样大");
}else if(res1 == NSOrderedAscending){
NSLog(@"右边比左边大");
}else {
NSLog(@"左边比右边大");
}
//忽略大小写进行比较
NSComparisonResult res2 = [@"abc" caseInsensitiveCompare:@"ABc"];
if(res2 == NSOrderedSame){
NSLog(@"一样大");
}else if(res2 == NSOrderedAscending){
NSLog(@"右边比左边大");
}else {
NSLog(@"左边比右边大");
}
}
字符串搜索
- hasPrefix 判断字符串是否以某个前缀开头
- hasSuffix判断字符串是否以某个后缀结尾
- rangOfString查找字符串
NSString *p = @"123455.3333xddd";
//判断字符串是否以某个前缀开头
NSLog(@"p is %i",[p hasPrefix:@"12"]);
//判断字符串是否以某个后缀结尾
NSLog(@"p is %i",[p hasSuffix:@"ddd"]);
//查找字符串中是否包含某个字符串
//找到返回在p中的起始位置,和长度是以结构体的形式返回,需要转换为字符串进行输出
//如果不存在长度返回的是0,起始位置是一个long类型的最大值
NSRange range = [p rangeOfString:@"345"];
if(range.location == NSNotFound || range.length == 0){
NSLog(@"找不到");
}
else{
NSLog(@"找到");
}
//反向搜索
NSRange range1 = [p rangeOfString:@"455" options:NSBackwardsSearch];
if(range1.location == NSNotFound ){
NSLog(@"找不到");
}
else{
NSLog(@"找到");
}
//指定范围搜索
NSRange s;
s.location = 8;
s.length =4;
NSRange range2 = [p rangeOfString:@"455" options:NSBackwardsSearch range:s];
字符串的截取
- substringFromIndex从索引位置截取到末尾
- substringToIndex 从开始位置截取到索引位置之前
- componentsSeparatedByString切割字符串
void stringCreate7(){
NSString *str = @"123456";
//从索引3开始截取到尾部
NSLog(@"%@",[str substringFromIndex:3]);
//从头部开始截取到某个索引位置,不包括索引
NSLog(@"%@",[str substringToIndex:4]);
//截取范围内的字符串
NSRange s;
s.location =2;
s.length = 3;
NSLog(@"%@",[str substringWithRange:s]);
//切割字符串
NSString *str2 = @"1,2,3,4,5";
//以,进行分割
NSArray *array = [str2 componentsSeparatedByString:@","];
//%@默认调用对象的decribtion方法打印对象中的所有元素
NSLog(@"%@",array);
}
NSString与路径
- pathWithComponents 将数组中的元素拼接成一个路径
- 把一个路径分解成数组 pathComponents
- isAbsolutePath判断是否为绝对路径
- lastPathComponent返回最后一个文件夹的名称
- stringByDeletingLastPathComponent删除最后一个文件夹
- stringByAppendingPathComponent最后拼接一个目录
void stringCreate8(){
//与路径相关的API
//快速创建一个自动释放的数组
NSMutableArray* compoments = [NSMutableArray array];
[compoments addObject:@"ABC"];
[compoments addObject:@"Deecc"];
[compoments addObject:@"Kooo"];
NSString *path = [NSString pathWithComponents:compoments];
NSLog(@"%@",path);
//把一个路径分解成数组
NSArray * array = [path pathComponents];
NSLog(@"%@",array);
//判断是否为绝对路径
path = @"users/mj/test";
//path的值一直没有变,改变的都是返回值
NSLog(@"%i",[path isAbsolutePath]);
//返回最后一个文件夹名
NSLog(@"最后一个文件夹名%@",[path lastPathComponent]);
//删除最后一个文件夹
NSLog(@"%@",[path stringByDeletingLastPathComponent]);
//最后拼接一个目录
NSLog(@"%@",[path stringByAppendingPathComponent:@"abc"]);
}
与拓展名相关
- pathExtension 获取拓展名
- stringByDeletingPathExtension 删除拓展名
- stringByAppendingPathExtension 拼接拓展名
void stringCreate9()
{
//删除拓展名
NSString *str = @"/User/M3/test.txt";
NSLog(@"拓展名:%@",[str pathExtension]);
NSLog(@"%@",[str stringByDeletingPathExtension]);
//拼接拓展名
NSLog(@"%@",[@"abc" stringByAppendingPathExtension:@"mp3"]);
}
与基础数据类型有关
- intValue将字符串转为整数
- length统计字符串的个数
- 取出对应索引位置的字符characterAtIndex
- UTF8String 将NSString转为c语言中char
void stringCreate10(){
NSString *str = @"100";
int a = [str intValue];
NSLog(@"%i",a);
//计算字数并不是字符数,一个中文占两个字符但只计为1
NSLog(@"length = %zi",[@"我是字符串123"length]);
// 取出对应索引位置的字符
unichar c = [@"abc" characterAtIndex:0];
NSLog(@"%c",c);
//转划为c语言中的char
char *s = [@"abc" UTF8String];
NSLog(@"%s",s);
}
NSMutableString
OS中的可变字符串类型,NSMutableString是NSString的子类,所以NSString的方法,NSMutableString都可以用
NSMutableString的实例化
- 动态方法 initWithcapacity:空间大小
- 静态方法 stringWithCapacity
//预先分配10个字符的存储空间
NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
NSMutableString *str2 = [NSMutableString stringWithCapacity:10];
NSMutableString的一些实例化方法
- appendString拼接一个字符串
- appendFormat拼接一个格式化的字符串
- replaceCharactersInRange替换字符串
- insertString插入字符串
- deleteCharactersInRange删除字符串
//拼接一个字符串
[str appendString:@"567"];
[str appendFormat:@"age is %i and height is %.2f ",27,1.55];
//替换字符串
//查到age的范围
NSRange range = [str rangeOfString:@"age"];
[str replaceCharactersInRange:range withString:@"no"];
//插入字符串
[str insertString:@"abc" atIndex:2];
NSLog(@"%@",str);
//删除字符串
range = [str rangeOfString:@"abc"];
[str deleteCharactersInRange:range];