Foundation框架-01 NSString对象
Objective-C
1.NSString基本概念
- NSString为OC中的字符串类型,用来存储字符串对象
- 创建字符串对象
// 1.直接通过@""创建
// 直接通过@""创建,那么会讲字符串放到常量区中
// 如果是字符串常量,那么只要内容相同,不会重复创建
NSString *str1 = @"ZJ";
NSString *str2 = @"ZJ";
//str1和str2指向的地址相同
// 2.通过alloc或类工厂方法创建
// 如果通过方法2创建对象,那么字符串放到堆区中
NSString *str3 = [[NSString alloc] initWithFormat:@"ZJ"];
NSString *str4 = [[NSString stringWithFormat:@"ZJ"]];
2.文件读写
- NSString 可以从文件中读写内容,主要涉及从文件路径读取即stringWithContentsOfFile:方法,以及资源路径读取即stringWithContentsOfURL:方法
- 文件路径读取方法如下:
/*
file: 文件路径,
encoding: 编码方式
error: 错误信息,如果读取错误, 会将错误信息保存到error中 ,如果读取正确, 就没有error = nil
注意: 以后在OC方法中但凡看到XXXofFile的方法, 传递的一定是全路径(绝对路径)
*/
//文件路径
NSString *path = @"/User/xxx/Desktop/abc.text";
//错误
NSError *error = nil;
// 通过文件路径读取文件内容
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (error == nil) {
//若是读取成功
NSLog(@"%@",str);
}else{
//若是读取失败,打印错误关键信息[error localizedDescription]
NSLog(@"%@",[error localizedDescription]);
}
- 文件写方法:
//函数返回BOOL值,代表成功写入文件
//atomically 如果传入YES, 字符串写入文件的过程中如果没有写完, 那么不会生成文件
//如果传入NO, 字符串写入文件的过程中如果没有写完, 会生成文件
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
- 资源文件路径读取方法如下:
NSURL *url = [NSURL fileURLWithPath:@"/User/xxx/Desktop/abc.text"];
NSError *error = nil;
NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error == nil) {
NSLog(@"str = %@", str);
}else{
NSLog(@"error = %@", [error localizedDescription]);
}
- 资源文件路径的写入方法(和路径写入基本类似):
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]; - URL说明
- 全称是Uniform Resource Locator(统一资源定位符)
- URL是互联网上标准资源的地址
- 在互联网上的每个资源都有唯一的一个URL,用来指定资源所在的位置
- URL格式
- 基本URL包含协议、主机域名(服务器名称\IP地址)、路径
- 例:http://image.baidu.com/channel,其中http为协议头,image.baidu.com为主机域名,后面是路径
- 常见的URL协议头(URL类型)
- http\https:超文本传输协议,网络资源
- ftp:文本传输协议(服务器资源)
- file:本地资源
- URL的创建(通过文件路径创建的,默认就是file协议的)
- NSURL *url =
[NSURL fileURLWithPath:@”/User/xxx/Desktop/abc.text”];
- NSURL *url =
3.字符串比较
大小写处理
- 全部转换为大写:-(NSString *)uppercaseString;
- 全部转换为小写:-(NSString *)lowerccaseString;
- 首字母变大写,其他变小写:-(NSString *)capitalizedString
字符串比较
- -(BOOL)isEqualToString:(NSString *)aString;//两个字符串的内容相同就返回YES,否者返回NO
- -(NSComparisonResult)compare:(NSString *)string;
- 比较两个字符串内容的大小,比较方法逐个字符进行比较ASCII值,返回NSComparisonResult作为比较结果
- OC中90%的以NSXXX作为参数的都是枚举类型
- NSComparisonResult是一个有三个值的枚举
如果左侧大于右侧,返回NSOrderedDescending
如果两者相等,NSOrderedSame
如果左侧小于右侧,返回NSOrderedAscending
- 字符串忽略大小写比较
-(NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
返回值与上一个方法一致
4.字符串搜索
字符串搜索方法
- -(BOOL)hasPrefix:(NSString *)aString;判断字符串是否以aString开头
- -(BOOL)hasSuffix:(NSString *)aString;判断字符串是否以aString结尾
- -(NSRange)rangeOfString:(NSString *)aString;判断字符串是否包含了aString,如果包含,就返回aString的范围,如果不包含,NSRange的location为NotFound,length为0
NSRange结构体
typedef struct _NSRange { NSUInteger location;//当前位置 NSUInteger length;//元素长度 } NSRange;//通常用来描述事物的范围
- NS结构体常用创建方法 NSMakeXXX();
5.字符串的截取
- -(NSString *)substringFromIndex:(NSUInteger)from;
- 从指定位置from开始(包括指定位置的字符)到尾部
- -(NSString *)substringToIndex:(NSUInteger)to;
- 从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
- -(NSString *)substringWithRange:(NSRange)range;
- 按照所给出的NSRange从字符串中截取子串
- 例:
//需求:要获取www.和.com之间的内容 NSString *str = @"http://www.baidu.com"; //NSRange(结构体): 位置/属性 //动态获取截取的起始位置 NSUIntrger location = [str rangeOfString:@"."].location + 1; //动态获取截取的长度 NSUInteger length = [str rangeOfString:@"." options:NSBackwardsSearch].location - location; //方法二: //NSUInteger length = [str rangeOfString:@".com"].location - location; //创建一个位置描述结构体 NSRange range = NSMakeRange(location, length); [str substringWithRange:range];//根据传入的位置截取字符串,返回一个新的字符串@"baidu"
6.字符串的替换
- -(NSString )stringByReplacingOccurrencesOfString:(NSString )target withString:(NSString *)replacement;
- 用replacement替换target
-(NSString )stringByTrimmingCharactersInSet:(NSCharacterSet )set;
- 去除首
NSCharacterSet是一个枚举变量
7.字符串和路径
路径
- -(BOOL)isAbsolutePath;//判断是否为绝对路径,即判断是否以/开头
- -(NSString *)lastPathComponent;//获得最后一个目录,即路径最后一个/之后的内容
- -(NSString *)stringByDeletingLastPathComponent;//删除最后一个目录,即删除最后一个/以及/之后的内容
- -(NSString )stringByAppendingPathComponent:(NSString )str;
//在路径后面拼接一个目录,并保持只有一个/
扩展名
- -(NSString *)pathExtension;//获得文件的扩展名,即截取.后面的内容
- -(NSString *)stringByDeletingPathExtension;//删除尾部的拓展名,即删除上述.以及.之后的内容
- -(NSString )stringByAppendingPathExtension:(NSString )str;//在尾部添加一个拓展名,即在最后面拼接上.和指定的内容,并保证只有一个.
8.字符串的转换
- -(NSUInteger)length;//返回字符串的长度(有多少个文字);
-(unichar)characterAtIndex:(NSUInteger)index;//返回index位置对应的字符
和基本数据类型的转换
- (double)doubleValue;
- (float)floatValue;
- (int)intValue;
- -(char *)UTF8String;//将OC中的字符串转化C语言中的字符串
- +(instancetype)stringWithUTF8String:(const char *)TerminatedCString;//根据传入的C语言字符串转换为OC的字符串
9.NSMutableString(可变字符串)
- NSMutableString类 继承NSString类,它可以动态的增、删、改字符串,而且可以使用父类中的所有方法
- NSString中的内容是不可变的,NSMutableString中的内容可动态改变
10.NSMutableString常用方法
- 增:-(void)appendString:(NSString *)aString;
- 删:-(void)deleteCharactersInRange:(NSRange)range;
- 替:-(void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
- 注意:不能通过直接赋值的方式创建可变字符串;即:通过@”“形式直接赋值给NSMutableString会报错