OC里的字符串
NSString 和 NSMutableString
- OC中的字符串
字符串就是一连串的字符序列,OC中有2个字符串:
NSString 和 NSMutableString - 其中 NSString是字符序列不可变的字符串
- NSMutableString 代表了字符序列可以变的字符串
NSString 的功能
NSString 代表了字符序列不可变的字符串,NSString 的功能如下
- 创建字符非,创建字行串既可使用以 init 开头的实例方法,也可使用以 string 开头的类方法,当然也可以直接用@的形式给出字符串直接量。
- 读取文件或网络 URL 来初始化字符串。
- 将字符建内容号入文件或 URL•
- 获取字符串长度,既可获取字符串肉包括的字符个数,也可获收字符串包括的字节个数。
- 获取字符串中的字符或字节,既可获取指定位置的字符,也可铁收指定范围的字符
- 获取字符串对应的C风格字符串
- 连接字符串。
- 分隔字符串
•查找字符串内指定的字符和子串。替换字符串。 - 比较字符串,
字符串大小比较。对字符串中的字符进行大小写转换。
NSString-功能创建的三种方式
- 将一个Unicode数组值抓转化字符串
- 把c风格字符串转化为 NSString对象
- 读取文件初始化 NSString对象
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
//示例3种创建NSString对象的方式
@autoreleasepool {
unichar data[6] = {1,2,3,4,5,6};
//1. unicode 初始化字符串
// 把数组转化成对应的 字符
NSString* str = [[NSString alloc] initWithCharacters:data length:6];
NSLog(@"%@", str);
//2.将c风格的字符串转化为NSString 对象
char *cstr = "hello ,3G!";
NSString* str2 = [NSString stringWithUTF8String: cstr];
NSLog(@"%@", str2);
//3.将字符串写入指定文件
[str2 writeToFile:@"myFile,txt"
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
// 读取文件内容,用文件内容初始化字符串
NSString *str3 = [NSString stringWithContentsOfFile:@"NSStringTest.m"
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@"%@", str3);
}
return 0;
}
2022-05-21 20:10:36.914213+0800 OC-字符串[5723:868393] \^A\^B\^C\^D\^E\^F
2022-05-21 20:10:36.914410+0800 OC-字符串[5723:868393] hello ,3G!
2022-05-21 20:10:36.914916+0800 OC-字符串[5723:868393] (null)
Program ended with exit code: 0
NSString-的常用功能
创建一个字符串必然要使用它,接下来就看调用NSString*的功能性方法不多赘述
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString* str = @"hello";
NSString* book = @"《iOS小白书》";
//1.在str后面追加字符串
// 原来的字符串对象不变,新生成的字符串赋值给str变量
str = [str stringByAppendingString:@" ,孟好!"];
NSLog(@"%@", str);
// 2.获取字符串对应的c风格
const char *cstr = [str UTF8String];
NSLog(@"c语言的字符串 :%s", cstr);
// 3.字符串后追加变量 的字符串
// 原来的字符串对象不变,新生成的字符串赋值给str变量,注意和1的区别
str = [str stringByAppendingFormat:@"%@适合3g iOS组的豹子阅读", book];
NSLog(@"%@", str);
//4.
NSLog(@"str的字符个数为 %lu", [str length]);
NSLog(@"str按照 UTF-8 字符集解码后的字节数为%lu", [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
//5.获取str前10个字符组成的字符串
NSString *str1 = [str substringToIndex:10];
NSLog(@"%@", str1);
//6.获取str从第五个字符开始,与后面所有字符所组成的字符串
NSString *str2 = [str substringFromIndex:5];
NSLog(@"%@", str2);
//7.获取str从第五个字符开始,与后面15个字符所组成的字符串
NSString *str3 = [str substringWithRange:NSMakeRange(5, 15)];
NSLog(@"%@", str3);
//8.找到某个字符串出现的位置
NSRange pos = [str rangeOfString:@"iOS"];
NSLog(@"iOS出现的开始位置是 %ld, 长度为 %ld", pos.location, pos.length);
//9.将所有字符串大写
str = [str uppercaseString];
NSLog(@"%@", str);
}
return 0;
}
NSRange 变量
在字符串功能倒数第二个方法我们 设置了一个pos变量来寻找 iOS字符出现的位置
NSRange 类的变量,它不是一个类,只是一个已经定义好的鸡腿菇体,包含了
length 和 int值 分别代表了起始位置和长度
创建 NSRange变量需要 NSMakeRange ()函数
可变字符串-NSMutableString
NSString字符串一旦创建,包含在这个对象中的字符串序列是不可改变的,直至它被销毁
NSMutableString 对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString子类因此前面介绍的的NSString 包含的方法 NSMutableString可直接调用
- 因为NSMutableString是可变的所以我们在进行操作的时候不需要再次赋值给NSMutableString创建的str 变量
- 这里简答举个例子不过多赘述
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableString *str = [NSMutableString stringWithString:@"hello"];
[str appendString:@"iOSSSSSS"];
//直接追加不赋值
NSLog(@"%@“, str");
//字符出包含的字符序列是可变的所以本身发生了该拜年因此无需需要重新赋值
[str appendFormat:@"适合我学习"];
NSLog(@"%@", str);
}
return 0;
}
2022-05-22 14:55:52.138802+0800 OC-字符串[7570:1175044] (null)“ ,str
2022-05-22 14:55:52.139023+0800 OC-字符串[7570:1175044] helloiOSSSSSS适合我学习
Program ended with exit code: 0
日期与时间(NSDate)
NSDate 对象
NSDate对象代表日期与时间,OC不仅提供了类方法来创建NSDate对象,也提供了大量init开头 的方法来初始化NSDate对象
NSDate 类的各个方法
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1.获取代表当前日期的,时间的NSDate------类方法
NSDate* date1 = [NSDate date];
NSLog(@"现在是北京时间 %@", date1);
//2.获取从当前时间开始 一天后的日期=-------实例方法
NSDate* date2 = [[NSDate alloc] initWithTimeIntervalSinceNow:3600 * 24];
NSLog(@" %@", date2);
//3.获取从当前时间开始 3天内的日期-------实例方法
NSDate* date3 = [[NSDate alloc] initWithTimeIntervalSinceNow:-3 * 3600 * 24];
NSLog(@" %@", date3);
//
//4. 从1970年1.1 开始 20 年之后的日期--------类方法
NSDate *date4 = [NSDate dateWithTimeIntervalSince1970:3600 * 24 * 366 * 20];
NSLog(@" %@", date4);
//5.获取当前系统的NSLocale
NSLocale* cn = [NSLocale currentLocale];
// 获取NSdate
NSLog(@"%@", [date1 descriptionWithLocale:cn]);
// 获取当前2个日期里较早的时期-------类方法
NSDate* earlier = [date1 earlierDate: date2];
// 获取当前2个日期里较晚的时期-------类方法
NSDate * later = [date1 laterDate:date2];
//compare 方法返回NScomparisonResult枚举值
// 枚举包含
//NSOrderedAscending,NSOrderedSame, NSOrderedDescending
// 分别代表了 调用compare 的日期位于被比较日期的之前 相同 之后
switch ([date1 compare:date3]) {
case NSOrderedAscending:
NSLog(@"date1 位于 date3 之前");
break;
case NSOrderedSame:
NSLog(@"date1 和 date3是同一天");
break;;
case NSOrderedDescending:
NSLog(@"date1 位于 date3 之前");
break;;
}
NSLog(@"date1 与 date3 时间相差%g s", [date1 timeIntervalSinceDate:date3]);
NSLog(@"date3 与现在差 %g s", [date3 timeIntervalSinceNow]);
}
return 0;
}
2022-05-23 17:42:19.620894+0800 OC-日期NSDate[9627:1522836] 现在是北京时间 2022-05-23 09:42:19 +0000
2022-05-23 17:42:19.620990+0800 OC-日期NSDate[9627:1522836] Tue May 24 17:42:19 2022
2022-05-23 17:42:19.621012+0800 OC-日期NSDate[9627:1522836] Fri May 20 17:42:19 2022
2022-05-23 17:42:19.621027+0800 OC-日期NSDate[9627:1522836] Tue Jan 16 08:00:00 1990
2022-05-23 17:42:19.621300+0800 OC-日期NSDate[9627:1522836] 2022年5月23日 星期一 中国标准时间 17:42:19
2022-05-23 17:42:19.621325+0800 OC-日期NSDate[9627:1522836] date1 位于 date3 之前
2022-05-23 17:42:19.621342+0800 OC-日期NSDate[9627:1522836] date1 与 date3 时间相差259200 s
2022-05-23 17:42:19.621357+0800 OC-日期NSDate[9627:1522836] date3 与现在差 -259200 s
Program ended with exit code: 0
NSDate方法代码的解释
- 创建NSDate 的类方法与实例方法基本相似,类方法以date开头而实例方法以init开头 ,一旦得到NSDate对象 两个NSDate对象之间可以比较大小,计算时间差
- NSLocale 代表了一个语言 ,国际环境比如中文 就可以通过NSLocale对象来代表,同一个日期在不同的语言下国际环境下 显示出来的字符是不同的。
日期格式器(NSDate Formatter)
NSDate Formatter代表一个日期格式器,它的功能就是完成NSDate 和 NSString之间的转换
NSDate Formatter调用
1.创建一个 NSDateFormatter 对象。
2. 调用 NSDateFormatter 的 setDate Style:、setTimestyle:方法设置格式化日期、时间的风格其中,日期、时间风格支持如下几个枚举值
- >NSDateFormatterNostyle:不显示日期、时间的风格。
- > NSDateFormatter Shortstyle:显示“短”的日期、时间风格。
- > NSDateFormatterMediumStyle:显示“中等”的日期、时间风格。
- NSDateFormatterLongstyle:显示“长”的日期、时间风格。
- NSDateFormatterFullStyle:显示“完整”的日期、时间风格
如果打算使用自己的格式模板,则调用 NSDateFormatter 的 setDate Format:方法设置日期、时间的模板即可。 - 3 .如果需要将 NSDate 转换为 NSString, 则调用 NSDateFormatter 的 stringFromDate:方法
执行格式化即可;如果需要将 NSString 转换为 NSDate,则调用 NSDateF ormatter 的
dateFromString:方法执行格式化即可。
日历(NSCalendar) 与 (日期组件NSDatecomponents)
两个类的作用
- 为了能分开处理 NSDate 对象所包含的各个字段的数据,Foundation 框架提供了NSCalendar 对象,该对象包含如下两个常用方法。
---------------------------------------------------------- (SDateComponents * ) components:fromDate:从NSDate 中提取年、月、日、时、分秒各时间字段的信息。
dateFromComponents: (NSDateComponents*)comps:使用comps 对象包含的年、月、日、时、分、秒各时间字段的信息来创建 NSDate
面两个方法都用到一个 NSDateComponents 对象,该对象专门用于封装年、月、日、时、分、秒各时间字段的信息。该对象非常简单,它只包含了对year、month. date、day、hour、
minute、second、week、weekday 等各字段的 setter 和 getter 方法
从NSDate对象中分开获取各时间字段 的数值的方法如下
- ①创建 NSCalendar 对象。
- ② 调用 NSCalendar 的 components: fromDate:方法获取 NSDate 对象中各时间字段的数值
该方法返回一个 NSDateComponents 对象。 - ③调用 NSDateComponents 对象的getter 方法来获取各时间字段的数值。
使用各时间字段的数值来初始化 NSDate 对象的步骤如下。
- ①创建 NSCalendar 对象。
- ② 创建一个 NSDateComponents 对象,调用该对象的 setter 方法来设置各时间字段的数值.
- ③调用 NSCalendar 的dateFromComponents: (NSDateComponents*)方法初始化 NSDate 对
象该方法将会返回一个 NSDate 对象。