c语言挨个读一串字符 并写入变量,Objective-C 学习第九天

框架: 系统或者第三方事先写好的写很牛X功能的类,把这些类交给我们使用,这些类的集合就叫框架.

Foundation框架: 是一个包,有很多类和函数,定义了一些数据类型.这个框架中的类都是一些最基础的类.其他的框架都是基于Foundation框架的.

UIKit.

AVFoundation.

......

NSString

1). NSString是一个数据类型,保存OC字符串.

NSString的本质是一个类.

最标准的创建NSString对象的方法:

NSString *str1 = [NSString new]; NSString *str2 = [[NSString alloc] init]; NSString *str3 = [NSString string];

使用这种方式创建的字符串是一个空的字符. @""

NSString 对象是用来存储字符串的.

2). NSString是OC中最常用的一个类,所以OC提供了一种更为快速的创建字符串对象的方式.

使用前缀@

@"jack": 本质是一个NSString对象,存储的是"jack"这个字符串

NSString *str1 = @"rose";

a. @"rose"本质是一个NSString对象,存储的是字符串"rose"

b. 将这个字符串对象的地址返回赋值给str1指针

格式控制符%p: 打印指针变量的值,打印地址

格式控制符%@: 打印指针指向的对象

NSString对象的恒定性

1). 当我们使用简要的创建字符串对象的时候,也就是使用OC字符串常量来初始化字符串指针的时候,这个字符串对象是存储在常量区的.

NSString *str = @"jack";

当我们调用NSString的类方法来创建对象的时候, 创建的对象是存储在堆区的.

NSString *str = [NSString stringWithFormat:@"jack"];

NSString *str = [NSString new];

2). 恒定性

当在内存中创建一个字符串对象后,这个字符串对象的内容就无法更改.

当我们重新为字符串指针初始化值的时候,并不是修改原来的字符串对象,而是重新的创建一个字符串对象,将这个字符串对象的地址重新赋值给字符串指针变量.

3). 当系统准备要在内存中创建字符串对象的时候,会先检查内存中是否有相同内容的字符串对象,如果有直接指向,如果没有才会重新创建.

4). 存储在常量区的数据不会被回收,所以存储在常量区的字符串也不会被回收.

NSString类中使用频率最高的方法

1). 使用拼接的方式创建一个NSString对象

+ (instancetype)stringWithFormat:(NSString *)format,...

int age = 10;

NSString *str = @"jack";

NSString *newStr = [NSString stringWithFormat:@"大家好,我叫%@,今年%d岁",str,age];

2). 得到字符串的长度

@property (readonly) NSUInteger length;

NSString *str = @"jack";

NSUInteger len = str.length;

3). 得到字符串当中指定下标的字符

- (unichar)characterAtIndex:(NSUInteger)index;

返回值是unichar类型的,要打印的话使用%C

NSString *str = @"jack";

unichar ch = [str characterAtIndex:2];

NSLog(@"ch = %C", ch);

4). 判断两个字符串的内容是否相等

a. 不能使用==来判断OC字符串的内容是否相同

b. == 运算符的作用: 比较左右两边的数据是否相同.

c. 所以如果我们要比较两个OC字符串的内容是否相同,不能使用==去比较.因为==比较的是字符串指针变量的值,而我们比较的是字符串的内容

- (BOOL)isEqualToString:(NSString *) aString;

可以比较字符串的内容

NSString *str1 = @"jack";

NSString *str2 = @"jack";

[str1 isEqualToString:str2];

5). 将C语言的字符串转换为OC字符串

+ (instancetype)stringWithUTF8String:(NSString *)string;

char *str = "jack";

NSString *str1 = [NSString stringWithUTF8String: str];

6). 将OC字符串转换为C语言字符串

@property (nullable, readonly) __strong const char *UTF8String;

NSString *str = @"jack";

const char *str1 = str.UTF*String;

字符串读写

1). 将一个字符串写入到磁盘上的某一个文件

(BOOL) writeToFile:(NSString *)path atomically:(BOOL)userAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;

参数1: 将字符串内容写入到哪一个文件之中,写上文件的路径.

参数2: YES,先将内容写入到一个临时文件,如果成功过再搬到指定的目录; NO,直接将内容写入到指定的文件,不安全,效率高

参数3: 指定写入的时候的编码.一般情况下使用UTF8. NSUTF8StringEncoding

参数4: 二级指针,要传递一个NSError指针的地址.如果写入成功,这个指针的值就是nil,如果失败,这个指针就会指向一个错误对象,这个对象描述了发生错误的信息. err.localizedDescription中存储发生错误的信息

返回值是BOOL类型,代表是否写入成功.

NSString *str = @"jack";

NSError *err;

[str writeToFile:@"/Users/Itcast/Desktop/abc.txt", atomically:NO encoding:NSUTF8StringEncoding error:&err];

2). 从磁盘文件读取内容

(instancetype) stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;

参数1:文件的路径

参数2:使用的编码NSUTF8StringEncoding

参数3:错误对象

NSError *err;

[NSString stringWithContentsOfFile:@"/Users/Itcast/Desktop/abc.txt" encoding:NSUTF8StringEncoding error:&err];

使用URL来读写字符串数据.

1). 优势: 皆可以读取本地磁盘文件,还可以读写网页文件、ftp服务器文件

2). 不同类型的URL地址的写法

a. 本地磁盘文件: file://+路径---->file:///Users/Itcast/Desktop/abc.txt

b. 网页地址: http://www.baidu.com/

c. ftp服务器文件的地址: ftp://server.itcast.cn/1.txt

将不同类型的地址封装在NSURL对象中

a. 从指定资源路径读取文本内容

(nullable instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;

b. 将字符串的内容写入到资源路径中

(BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;

c. 如果要向网页或者ftp写内容要有权限.

NSURL *u1 = [NSURL URLWithString:@"http://www.itcast.cn"];

NSString *str = [NSString stringWithContentsOfURL:u1 encoding:NSUTF8StringEncoding error:nil];

NSURL *u1 = [NSURL URLWithString:@"file:///Users/Itcast/Desktop/abc.txt"];

NSString *str = @"hehehe";

BOOL res = [str writeToURL:u1 atomically:NO encoding:NSUTF8StringEncoding error:nil];

字符串比较

1). 不忽略大小写

(NSComparisonResult)compare:(NSString *)string;

NSString *str1 = @"hehehe";

NSString *str2 = @"jack";

NSComparisonResult res = [str compare:str2];

swith(res){

case NSOrderedAscending://str1小

break;

case NSOrderedSame://一样大

break;

case NSOrderedDescending://str2小

break;

default:

break;

}

2). 忽略大小写

NSString *str1 = @"hehehe";

NSString *str2 = @"JACK";

NSComparisonResult res = [str compare:str2 option:NSCaseInsensitiveSearch];

swith(res){

case NSOrderedAscending://str1小

break;

case NSOrderedSame://一样大

break;

case NSOrderedDescending://str2小

break;

default:

break;

}

3). 比较字符串中的数字

NSString *str1 = @"hehehe001";

NSString *str2 = @"hehehe002";

NSComparisonResult res = [str compare:str2 option:NSNumericSearch];// 只能比格式固定的

swith(res){

case NSOrderedAscending://str1小

break;

case NSOrderedSame://一样大

break;

case NSOrderedDescending://str2小

break;

default:

break;

}

4). 判断是否以某个字符串开头

NSString *str = @"http://www.baidu.com/";

BOOL res = [str hasPrefix:@"http://"];

5). 判断是否以某个字符串结束

NSString *str = @"/Users/Apple/Music/我们不一样.mp3";

BOOL res = [str hasSuffix:@".mp3"];

在主串中搜索子串

1). 从前往后

- (NSRange) rangeOfString:(NSString *)searchString;

返回值NSRange类型的结构体变量

typedef struct _NSRange{ NSUInteger location;//代表子串在主串出现的下标 NSUInteger length;//代表子串在主串中匹配的长度 } NSRange;

NSString *str = @"i love itcast!"; // 在str字符串中搜索@"love"出现的范围 NSRange range = [str rangeOfString:@"love"]; if(range.location==NSNotFound){ // 没有找到 } else { // 找到了 } 或者 if(range.length==0){ // 没有找到 } else { // 找到了 }

2). 从后往前

NSString *str = @"i love itcast love!"; // 在str字符串中搜索@"love"出现的范围 NSRange range = [str rangeOfString:@"love" options: NSBackwardsSearch]

NSRange结构体

1). 是Foundation框架中定义的一个结构体

typedef struct _NSRange{ NSUInteger location;//代表子串在主串出现的下标 NSUInteger length;//代表子串在主串中匹配的长度 } NSRange;

NSRange range;

// 这个结构体变量一般情况下用来表示一段范围,特别用在子串在主串中的范围.

2). 声明并初始化结构体变量的方式

a. 最原始的方式

NSRange range; range.location = 3; range.length = 4;

b. 第二种方式: NSRange range = {3, 7};

c. 第三种方式: NSRange range = {.location = 3, .length=7};

d. Foundation框架中定义了一个函数,这个函数可以快速的创建一个NSRange结构体.

NSMakeRange(loc, len);返回一个指定属性的NSRange结构体变量

NSRange range = NSMakeRange(3,7);

5. 可以将NSRange结构体变量转换为NSString.

NSRange range = NSMakeRange(3,7);

NSString *str = NSStringFromRange(range);

字符串截取

1). 取到字符串中的一部分

(NSString *)substringFromIndex(NSUIntege)from;

从指定的下标处一直截取到最后

NSString *str = @"背景连锁酒店分开计算懒死了";

NSString *newStr = [str substringFromIndex:3];

2). 从第0个开始截取指定的个数

(NSString *)substringToIndex(NSUIntege)to;

3). 从指定位置截取指定长度的字符串

(NSString *)substringWithRange(NSRange)range;

字符串替换

1).

(NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;

将字符串中第一个参数替换为第二个参数,原来的指针指向的内容是不会变的,新串是以方法的返回值返回的.

NSString *str = @"背景连锁酒店分开计算懒死了";

NSString *newStr = [str stringByReplacingOccurrencesOfString:@"背景" withString:@"广州"];

字符串数据转换为其他类型

@property (readonly)double doubleValue;

@property (readonly)float floatValue;

@property (readonly)int intValue;

@property (readonly)NSUINteger integerValue;

@property (readonly)long long longLongValue;

@property (readonly)BOOL boolValue;

转换注意:

其他

1). 去掉字符串前后的空格

NSString *str = @" Jack ";

[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

2). 将字符串转换为大写或者小写

NSString *str = @" Jack ";

[str uppercaseString];

[str lowercaseString];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值