1. NSString
1.1创建方法(3种):
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建方法
NSString *str1 = [[NSString alloc]init];//创建的是空字符串,没有意义
NSString *str2 = @"Hello World";//讲一个字符串对象直接赋值给str2.@是一个对象运算符,创建的都是常量对象,保存在代码区
NSString *str3 = @"Hello World";
NSLog(@"%p",str2);
NSLog(@"%p",str3);//str2和str3是同一个对象,如果两个常量对象完全相同,不会创建两个对象
int a = 10;
NSString *str4 = [NSString stringWithFormat:@"%@ World %d",@"Hello",a];//格式化创建,通过占位符,把其他的数据转换为字符串
NSLog(@"%@",str4);
NSString *str5 = [NSString stringWithFormat:@"%@ World %d",@"Hello",10];
NSLog(@"%p",str4);//stringWithFormat创建的对象即使内容相同,也会是完全不同的对象
NSLog(@"%p",str5);
}
return 0;
}
运行结果:
2016-08-25 09:43:14.913 day20_01[731:43371] 0x100001048
2016-08-25 09:43:14.914 day20_01[731:43371] 0x100001048
2016-08-25 09:43:14.915 day20_01[731:43371] Hello World 10
2016-08-25 09:43:14.915 day20_01[731:43371] 0x1002041b0
2016-08-25 09:43:14.915 day20_01[731:43371] 0x100100710
1.2截取方法(3种):
NSString *str6 = @"www.baidu.com";
NSString *str7 = [str6 substringToIndex:3];//从第一个字符开始截取几个字符(截取头)
NSLog(@"%@",str7);
NSString *str8 = [str6 substringFromIndex:10];//从指定位置开始截取到最后一个字符(截取尾)
NSLog(@"%@",str8);
NSString *str9 = [str6 substringWithRange:NSMakeRange(4,5)];//从指定位置开始连续截取几个字符(截取中段)
NSLog(@"%@",str9);
运行结果:
2016-08-25 09:49:35.936 day20_01[784:45364] www
2016-08-25 09:49:35.936 day20_01[784:45364] com
2016-08-25 09:49:35.937 day20_01[784:45364] baidu
1.3拼接方法(3种)
NSString *str10 = @"Hello";
NSString *str11 = @" World";
NSString *str12 = [[NSString alloc]initWithFormat:@"%@%@",str10,str11];//初始化拼接
NSLog(@"%@",str12);
NSString *str13 = [str10 stringByAppendingString:str11];//追加拼接
NSLog(@"%@",str13);
NSString *str14 = [str10 stringByAppendingFormat:@"%d %@",a,str11];//格式化拼接,可以自动转换其他类型数据成字符串后拼接
NSLog(@"%@",str14);
1.4替换方法
NSString *str15 = @"www.baidu.com";
NSString *str16 = [str15 stringByReplacingCharactersInRange:NSMakeRange(4, 5) withString:@"google"];
NSLog(@"%@",str16);
运行结果:
2016-08-25 10:29:58.298 day20_01[849:52810] www.google.com
1.5从文件中读入字符串
NSString *str17 = [NSString stringWithContentsOfFile:@"/Users/tarena/Desktop/testString" encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",str17);
1.6用占位符%@输出自定义类的对象
-(NSString*)description
{
NSString *stu = [NSString stringWithFormat:@"姓名:%@ 年龄:%d 性别:%@ 住址:%@",self.name,self.age,self.gender == 1?@"男":@"女",self.addr];
return stu;
}
SHStudent *stu = [[SHStudent alloc]initWithName:@"张三" andAge:18 andGender:YES andAddr:@"江苏南京"];
[stu show];
NSLog(@"%@",stu);
运行结果:
2016-08-25 11:01:38.825 day20_01[965:63324] 张三 18 男 江苏南京
2016-08-25 11:01:38.825 day20_01[965:63324] 姓名:张三 年龄:18 性别:男 住址:江苏南京
1.7判断两个字符串相等的方法
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//从键盘输入一个用户名和密码,与文件中保存的对比,如果相同,显示登陆成功,否则显示用户名或密码错误
NSString *str = @"string";
if ([str isEqualToString:@"string"]) {
NSLog(@"相同");
}
char *userName = (char*)malloc(sizeof(char));
char *pwd = (char*)malloc(sizeof(char));
NSString *userName1;
NSString *pwd1;
NSString *userAndPwd = [NSString stringWithContentsOfFile:@"/Users/tarena/Desktop/userAndPwd" encoding:NSUTF8StringEncoding error:nil];
int i = 0;
for (i = 0;[[userAndPwd substringWithRange:NSMakeRange(i, 1)] isEqualToString:@" "]==NO; i ++);
userName1 = [userAndPwd substringToIndex:i];
pwd1 = [userAndPwd substringFromIndex:i+1];
NSLog(@"请输入用户名:");
scanf("%s",userName);
NSLog(@"请输入密码");
scanf("%s",pwd);
if ([userName1 isEqualToString:[NSString stringWithFormat:@"%s",userName]] && [pwd1 isEqualToString:[NSString stringWithFormat:@"%s",pwd]]) {
NSLog(@"登陆成功");
}
else
NSLog(@"用户名或密码错误");
free(userName);
free(pwd);
}
return 0;
}
运行结果:
2016-08-25 11:55:16.666 day20_02[1119:75949] 相同
2016-08-25 11:55:16.667 day20_02[1119:75949] 请输入用户名:
shuan
2016-08-25 11:55:18.844 day20_02[1119:75949] 请输入密码
132
2016-08-25 11:55:20.039 day20_02[1119:75949] 用户名或密码错误
2. NSMutableString
2.1是可变字符串,是NSString的子类
2.2创建方法(4种)
//创建方法
NSMutableString *str1 = [[NSMutableString alloc]init];//空字符串,有意义,效率低
NSMutableString *str2 = [NSMutableString stringWithCapacity:100];//预估值
//NSMutableString *str3 = @"abc";//str3会退化成不可变字符串,不能这样初始化可变字符串
NSMutableString *str4 = [NSMutableString stringWithString:@"string"];//创建可变字符串的对象同时初始化
NSMutableString *str5 = [NSMutableString stringWithFormat:@"age:%d",6];//创建可变字符串对象的同时,进行格式化的方法
2.3添加方法(2种)
[str2 appendString:@"The word, string, "];//追加添加方法
NSLog(@"%@",str2);
[str2 appendString:@"has six characters"];
NSLog(@"%@",str2);
NSMutableString *str6 = [NSMutableString stringWithString:@"string"];
[str6 appendFormat:@" has %lu characters",str6.length];
NSLog(@"%@",str6);
2.4求字符串中字符的个数,即求字符串长度
2.5删除方法(1种)
2.6确定子串在整个字符串中的范围
NSMutableString *str7 = [NSMutableString stringWithString:@"I'm learing OBJective-C language."];
//[str7 deleteCharactersInRange:NSMakeRange(12, 10)];
[str7 deleteCharactersInRange:[str7 rangeOfString:@"OBJective-"]];//不用数字符串个数
NSLog(@"%@",str7);
2.7替换方法
NSMutableString *str8 = [NSMutableString stringWithString:@"This is a string"];
[str8 replaceCharactersInRange:[str8 rangeOfString:@"a"] withString:@"another"];
NSLog(@"%@",str8);
3. NSNumber
3.1用于将基本数据类型的数据或变量封装成OC的类
3.2封装方法:numberWith...
3.3拆封方法:...Value
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 10;
NSNumber *i = [NSNumber numberWithInt:a];//封装,将基本数据类型的数据变成OC类的对象
NSLog(@"%@",i);
int b;
b = [i intValue];//拆封,将OC;类的对象还原成基本数据类型的数据
NSLog(@"%d",b);
float f = 3.14;
NSNumber *f1 = [NSNumber numberWithFloat:f];
NSLog(@"%@",f1);
float f2 = [f1 floatValue];
NSLog(@"%f",f2);
}
return 0;
}
4.NSValue
4.1NSValue是NSNumber的父类
4.2用于封装结构体类型的变量
#import <Foundation/Foundation.h>
typedef struct
{
int x;
int y;
}SHPoint;
int main(int argc, const char * argv[]) {
@autoreleasepool {
SHPoint point;
point.x = 10;
point.y = 20;
NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(SHPoint)];
NSLog(@"%@",value);
SHPoint point1;
[value getValue:&point1];
NSLog(@"%d %d",point1.x,point1.y);
}
return 0;
}
5.NSData
5.1OC中的日期时间类
5.2创建对象即可得到世界标准时间
5.3本地时间需要通过一个格式代码转换
#import "NSDate+SHLocalTime.h"
@implementation NSDate (SHLocalTime)
-(NSDate *)localTime
{
return [NSDate localTime];
}
+(NSDate *)localTime//本地时间
{//以下为格式代码
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSUInteger integer = [zone secondsFromGMTForDate:[NSDate date]];
NSDate *localTime = [[NSDate date]dateByAddingTimeInterval:integer];
return localTime;
}
@end
5.4获取指定时间
5.5时间间隔(3种)
NSDate *date1 = [NSDate date];
NSLog(@"%@",date1);//世界标准时
NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:30];
NSLog(@"%@",date2);
date2 = [NSDate dateWithTimeIntervalSinceNow:-30];
NSLog(@"%@",date2);
NSTimeInterval seconds = [date1 timeIntervalSince1970];
NSLog(@"%lf",seconds);
NSDate *date3 = [NSDate dateWithTimeIntervalSinceNow:-60];
seconds = [date3 timeIntervalSinceNow];
NSLog(@"%lf",seconds);
NSDate *time1 = [NSDate dateWithTimeIntervalSinceNow:-60*60*24];
NSDate *time2 = [NSDate dateWithTimeIntervalSinceNow:60*60*24];
seconds = [time1 timeIntervalSinceDate:time2];
NSLog(@"%lg",seconds);
5.6格式化输出时间
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @"yyyy年MM月dd日 HH:mm:ss EEEE";
NSString *str = [df stringFromDate:date1];
NSLog(@"%@",str);
思考练习:
1、根据身份证号码,求出生年月日
2、输出当前时间的年月日
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
解析:
#import <Foundation/Foundation.h>
NSDate *localTime()
{
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSUInteger integer = [zone secondsFromGMTForDate:[NSDate date]];
NSDate *localTime = [[NSDate date]dateByAddingTimeInterval:integer];
return localTime;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *readIDCard = [NSString stringWithContentsOfFile:@"/Users/tarena/Desktop/IDCard" encoding:NSUTF8StringEncoding error:nil];
NSString *year = [readIDCard substringWithRange:NSMakeRange(6, 4)];
NSString *month = [readIDCard substringWithRange:NSMakeRange(10, 2)];
NSString *day = [readIDCard substringWithRange:NSMakeRange(12, 2)];
NSLog(@"%@年%@月%@日",year,month,day);
NSLog(@"%@",localTime());
NSDate *now = [NSDate date];
NSDateFormatter *date = [[NSDateFormatter alloc]init];
date.dateFormat = @"yyyy年MM月dd日";
NSString *dateNow = [date stringFromDate:now];
NSLog(@"%@",dateNow);
}
return 0;
}