创建示例字符串
// 用到的字符串
NSString *testStr = @"abcdefg";
NSString *testStr1 = @"def";
// 路径字符串
NSString *pathStr = @"/Users/cukiy/Desktop/test.m";
一、截取字符串
// 1. 从testStr中获取下标3之前的字符串
NSString *str1 = [testStr substringToIndex:3];
// str1打印结果:abc
// 2. 从testStr中获取下标3之后的字符串
NSString *str2 = [testStr substringFromIndex:3];
// str2打印结果:defg
// 3. 指定范围截取.从testStr中第二个字符开始截取3个字符
NSString *str3 = [testStr substringWithRange:NSMakeRange(2, 3)];
// str3打印结果:cde
// 4. 从testStr中字符"c"为界进行分割,返回包含两个字符串的数组
NSArray *array = [testStr componentsSeparatedByString:@"c"];
// array打印结果:ab,defg
二、检索和替换
// 1. 在testStr中查找字符串testStr1,如果能找到,就以NSRange的形式返回testStr1的位置和长度.如果没有找到,则返回一个位置为NSNotFound 长度为0的NSRange类型的对象
NSRange range = [testStr rangeOfString:testStr1];
NSLog(@"%@",NSStringFromRange(range));
// range打印结果:{3,3};
// 2. 将testStr中range范围内的内容替换为字符串@"xxx"
NSString *str4 = [testStr stringByReplacingCharactersInRange:NSMakeRange(2, 2) withString:@"xxx"];
// str4打印结果:abxxxefg
// 3. 将testStr中的@"abc"替换为@"123"
NSString *str5 = [testStr stringByReplacingOccurrencesOfString:@"abc" withString:@"123"];
// str5打印结果:123defg
三、比较字符串
// 1. 区分大小写比较两个字符串的大小,返回值是枚举类型
NSInteger res = [testStr compare:str1];
// 2. 不区分大小写比较两个字符串的大小,返回值是枚举类型
NSInteger res1 = [testStr caseInsensitiveCompare:str1];
// 3. 按照Mac系统Finder的排序规则进行比较操作.返回值是枚举类型
NSInteger res2 = [testStr localizedStandardCompare:str1];
/**
上面三个方法返回的枚举类型
enum {
NSOrderedAscending = -1, // 左边的对象小于右边的对象
NSOrderedSame, // 两个对象大小相等
NSOrderedDescending // 左边的对象大于右边的对象
};
typedef NSInteger NSComparisonResult;
*/
// 4. 判断两个字符串内容是否相同,如果相同就返回YES
BOOL res3 = [testStr isEqualToString:str1];
// 5. 判断str中是否包含str1,如果包含就返回YES
BOOL res4 = [testStr containsString:str1];
// 6. 判断str字符串是否以str1开头,如果是就返回YES
BOOL res5 = [testStr hasPrefix:str1];
// 7. 判断str字符串是否以str2结尾,如果是就返回YES
BOOL res6 = [testStr hasSuffix:str2];
四、拼接字符串
NSInteger age = 66;
// 1. 拼接字符串
NSString *str6 = [NSString stringWithFormat:@"my age is %ld",age];
// str6打印结果是:my age is 66
// 2. 在testStr后面追加字符串@"123";
NSString *str7 = [testStr stringByAppendingString:@"123"];
// str7打印结果:abcdefg123
// 3. 在testStr后面拼接字符串
NSString *str8 = [testStr stringByAppendingFormat:@"my age is %ld",age];
// str8打印结果:abcdefgmy age is 66
五、路径的处理
// 1. 获取路径中最后一个组成部分
NSString *str9 = [pathStr lastPathComponent];
// str9打印结果:test.m
// 2. 在路径后面添加一个字符串,根据需要会自动追加分割符
NSString *str10 = [pathStr stringByAppendingPathComponent:@"xxx"];
// str10打印结果:/Users/cukiy/Desktop/test.m/xxx
// 3. 删除路径中最后一个组成部分,如果返回的结果不是根路径,那么最后的路径分割符也会被删除
NSString *str11 = [pathStr stringByDeletingLastPathComponent];
// str11打印结果:/Users/cukiy/Desktop
// 4. 返回文件的扩展名.扩展名不包括".",如果没有扩展名则返回空字符串
NSString *str12 = [pathStr pathExtension];
// str12打印结果:m
// 5. 将"."和制定的扩展名添加到现有路径的最后一个组成部分上
NSString *str13 = [pathStr stringByAppendingPathExtension:@"txt"];
// str13打印结果:/Users/cukiy/Desktop/test.m.txt
// 6. 删除文件的扩展名(包括".").如果没有扩展名,则返回原来的字符串
NSString *str14 = [pathStr stringByDeletingPathExtension];
// str14打印结果:/Users/cukiy/Desktop/test
// 7. 使用数组中的元素来构建路径,结合的时候自动添加路径分割符"/".想要生成一个绝对路径的话,数组中的第一个元素使用@"/".路径的最后想以分割符"/"来结尾的话,数组的最后一个元素使用空字符串(加个空格)@" "
NSArray *pathArray = @[@"/",@"Users",@"cukiy",@"Desktop",@"xxx.h",@" "]; NSString *str15 = [NSString pathWithComponents:pathArray];
// str15打印结果:/Users/cukiy/Desktop/xxx.h/
// 8. 和pathWithComponents相反,把字符串当做路径来解析,将路径的各个组成部分放入数组中.如果是绝对路径,数组的第一个元素是@"/"
NSArray *array1 = [pathStr pathComponents];
/* array1打印结果:
(
"/",
Users,
cukiy,
Desktop,
"test.m"
)
*/
// 9. 判断路径是不是一个绝对路径,如果是则返回YES
BOOL res7 = [pathStr isAbsolutePath];
六、文件的输入和输出
// 1. 通过读取文件path中的内容来初始化一个NSString,文件的编码为enc.读取失败时会返回nil,并将错误信息设定到error.error设置为NULL不会返回任何错误信息
NSString *str16 = [NSString stringWithContentsOfFile:<#(nonnull NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>];
// 2. 和上一个方法一样,不同的地方在于这个方法能够自动判别文件的编码,并通过enc返回
NSString *str17 = [NSString stringWithContentsOfURL:<#(nonnull NSURL *)#> usedEncoding:<#(nullable NSStringEncoding *)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>];
// 3.将字符串的内容写到以path为路径的文件中,写入的时候使用enc指定的编码,写入成功则返回YES. // atomically为YES的情况下,会先创建一个临时文件,把字符串的内容写入到临时文件中,写入成功后再把临时文件重命名为path指定的文件.通过这种方法,就算有同名文件存在,写入发生错误时也不会损坏原来的文件. atomically为NO的情况下,则直接输入字符串的内容到path指定的文件中.如果写入失败,则会在返回NO的同时把出错的原因写入到error中.并返回给方法调用者
BOOL res8 = [testStr writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#> encoding:<#(NSStringEncoding)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>];