Foundation框架:
//------------ 第一种创建形式,最直接的形式 // 注意:这样创建的字符串存储在常量区(也就是内存只分配一次,以后要调用该字符串,直接从常量区读取 // NSString *str1 = @"你好China"; // NSString *str2 = @"你好China"; // NSLog(@"str1 = %p, str2 = %p", str1, str2); /* str1 = 0x100001040, str2 = 0x100001040 可以看到打印结果,证明这样直接创建的字符串存储在常量区 */ //------------ 第二种创建形式,格式化的方法,通过NSString类的类方法 // NSString *str1 = [NSString stringWithFormat:@"%@", @"你好China"]; // NSString *str2 = [NSString stringWithFormat:@"%@", @"你好China"]; // NSLog(@"str1 = %p, str2 = %p", str1, str2); /* str1 = 0x100109ba0, str2 = 0x100103580 可以看到这样创建的字符串地址不相同,因为类方法的本质是通过[[NSString alloc] init]创建的因此每次创建都会分配内存地址 */ //------------ 第二种创建形式,格式化的方法,通过对象方法创建 // NSString *str1 = [[NSString alloc] initWithFormat:@"%@", @"你好China"]; // NSString *str2 = [[NSString alloc] initWithFormat:@"%@", @"你好China"]; // NSLog(@"str1 = %p, str2 = %p", str1, str2); /* str1 = 0x100109bc0, str2 = 0x1001035a0 这样创建地址当然也不会相同 */
// 1,读出文本文件中的内容 // 第一种方式:stringWithContentsOfFile /* 参数:1,文件的全路径,OC中的File都是指文件的全路径 2, encoding:指文件读出时按什么格式的编码读取。(要想读取不出现乱码,那么写入时字符串用什么编码读取就用什么编码,一般计算机写入编码都是UTF-8 3,error:指指向对象指针的地址,如果读取失败,系统会修改error的错误信息 */ // NSError *err = nil; // NSString *text = [NSString stringWithContentsOfFile:@"/Users/ll/Desktop/text.txt" encoding:NSUTF8StringEncoding error:&err]; // if (err!=nil) { // NSLog(@"读取失败"); // NSLog(@"%@", [err localizedDescription]); // }else{ // NSLog(@"%@", text); // } // 第二种方式:stringWithContentsOfURL // NSError *err = nil; // // // 注意:1,用URLWithString读取本地文件内容的话必须加:file:// // 2,通过URLWithString这种方式创建url的时候,如果路径中有中文字符则,报错! // 3,如果路径中有中文,则使用另外一个方法来创建: // NSURL *url = [NSURL fileURLWithPath:@"/Users/ll/Desktop/资料/text.txt"]; // NSURL *url = [NSURL URLWithString:@"file:///Users/ll/Desktop/text.txt"]; // NSString *text = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&err]; // if (err!=nil) { // NSLog(@"读取失败"); // NSLog(@"%@", [err localizedDescription]); // }else{ // NSLog(@"%@", text); // } // 2,写入到文件内容 // --------------第一种方式:writeToFile /* 参数:atomically的YES表示当文件写入失败后就不创建文件 atomically的NO表示表示当文件写入失败后也可以创建文件 */ // NSString *text = @"hello0, 中国"; // NSError *err = nil; // [text writeToFile:@"/Users/ll/Desktop/text.txt" atomically:YES encoding:NSUTF8StringEncoding error:&err]; // if (err!=nil) { // NSLog(@"写入失败"); // NSLog(@"%@", [err localizedDescription]); // }else{ // NSLog(@"写入成功"); // } //--------------第二种写入方法 writeToURL // NSString *text = @"hello0, 中国"; // NSError *err = nil; // NSURL *url = [NSURL URLWithString:@"file:///Users/ll/Desktop/text.txt"]; // [text writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:&err]; // if (err!=nil) { // NSLog(@"写入失败"); // NSLog(@"%@", [err localizedDescription]); // }else{ // NSLog(@"写入成功"); // }
2,通过URLWithString这种方式创建url的时候,如果路径中有中文字符则,报错!
3,如果路径中有中文,则使用另外一个方法来创建:
NSURL *url = [NSURL fileURLWithPath:@"/Users/ll/Desktop/资料/text.txt”]; 而fileURLWithPath方法中不需要加file://
四:NSString中的一些方法
1,大小写处理方法
// ============== 一:NSString大小写处理方法 // 1,大写转小写操作 // NSString *str = @"heLLo, wORld"; // str指向的字符串在常量区 // NSLog(@"str = %p", str); // str = [str lowercaseString]; // str指向的字符串在堆区 // NSLog(@"str = %p", str); // NSLog(@"%@", str); // 注意上面打印两个地址不同,说明NSString字符串是不可变字符串,对象方法返回一个新的地址 // 2,小写转大写 // NSString *str = @"heLLo, wORld"; // str = [str uppercaseString]; // NSLog(@"%@", str); // 3,首字母变大写,其他字母变小写 // NSString *str = @"heLLo, wORld"; // str = [str capitalizedString]; // NSLog(@"%@", str); // 结果:Hello, World
2:NSString的比较方法
// 1,比较两个字符串中的内容是否相同 // NSString *str1 = @"ABC"; // NSString *str2 = @"ABC"; // BOOL b = [str1 isEqualToString:str2]; // NSLog(@"%d", b); // 结果 :1; // 2,比较两个字符串的大小,注意:这个比较字符串中每一个字符的ACSII码值的大小 // NSString *str1 = @"NBA"; // NSString *str2 = @"CBA"; // NSComparisonResult result = [str1 compare:str2]; // switch (result) { // case NSOrderedAscending: // 升序 // NSLog(@"str1<str2"); // break; // case NSOrderedSame: // NSLog(@"str1=str2"); // break; // case NSOrderedDescending: // 降序 // NSLog(@"str1>str2"); // break; // } // /** // * 注意:compare方法的返回值是一个枚举类型:NSComparisonResult // 它有三个枚举值分别是:NSOrderedAscending: // 升序 // NSOrderedSame:// 相同 // NSOrderedDescending: // 降序 // */ // 3,也是比较字符串的大小,忽略字符串中的大小写进行比较: // NSString *str1 = @"NBA"; // NSString *str2 = @"nba"; // NSComparisonResult result = [str1 caseInsensitiveCompare:str2]; // switch (result) { // case NSOrderedAscending: // 升序 // NSLog(@"str1<str2"); // break; // case NSOrderedSame: // NSLog(@"str1=str2"); // break; // case NSOrderedDescending: // 降序 // NSLog(@"str1>str2"); // break; // }
3,NSString的搜索方法
// 1,检查?一个字符串是否以http开头 // NSString *str = @"http://www.baidu.com"; // BOOL b = [str hasPrefix:@"http"]; // NSLog(@"%d", b); // 结果:1 // 2,检查?一个?文件是否为png?文件 // NSString *str = @"123.png"; // BOOL b = [str hasSuffix:@"png"]; // NSLog(@"%d", b); // 结果: 1; // 3.检查?一个字符串?里边是否包含了word /** * 如果包含, 就返回aString的范围 如果不包含, NSRange的location为NSNotFound, length为0 NSRange?用来表?示事物的?一个范围,通常是字符串?里的字符范围或者数组?里的元素范围 NSRange是一个结构体类型内部含有两个属性值 1,location,2,length 创建NSRange常用方法 NSRange range = NSMakeRange(x,y); */ // NSString *str = @"hellowordchina"; // NSRange range = [str rangeOfString:@"word"]; // NSLog(@"%ld, %ld", range.location, range.length); // 4,反方向搜索,从后往前搜索 /** * 注意:options参数类型为一个枚举值,如果不填为0,这个参数就没有任何意义 如果想指定操作顺序等一些步骤可以选定枚举值 */ // NSString *str = @"hellowordchina"; // NSRange range = [str rangeOfString:@"word" options:NSBackwardsSearch]; // NSLog(@"%ld, %ld", range.location, range.length);
4,NSString的截取和替换
// 1,从字符串的某个位置开始截取直到字符串结束 // 注意:此方法包含指定位置 // NSString *str = @"hello china word"; // str = [str substringFromIndex:3]; // NSLog(@"%@", str); // 结果:lo china word // 2,从字符串开始都某个位置的字符串 // 注意:这个方法不包含最后指定的位置 // NSString *str = @"hello china word"; // str = [str substringToIndex:4]; // NSLog(@"%@", str); // 结果 : hell // 3,用指定字符串替换字符串中的某个字符串或字符 // NSString *str = @"this*is**apple"; // str = [str stringByReplacingOccurrencesOfString:@"*" withString:@" "]; // NSLog(@"%@", str);
5,
/** * 去除所有的空格 [str stringByReplacingOccurrencesOfString:@" " withString:@""] • 去除?首尾的空格 [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 练习:去除头、尾的所有?大写字?母、?小写字?母、*号。 + (id)whitespaceCharacterSet; //去掉头尾空格 + (id)lowercaseLetterCharacterSet; // 去掉头尾的?小写字母 + (id)uppercaseLetterCharacterSet; //去掉头尾的?大写字母 + (id)characterSetWithCharactersInString:(NSString *)aString; // 去掉头尾的指定字符串 */ // 1,去除所有的空格 // NSString *str = @" hel lo "; // str = [str stringByReplacingOccurrencesOfString:@" " withString:@""]; // NSLog(@"====%@=====", str); // 2,去掉首位空格 // NSString *str = @" he l lo "; // str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // NSLog(@"====%@====", str); // 去掉两端所有的小写字母 //s1 = [s1 stringByTrimmingCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]]; // 去掉两端所有的大写字母 //s1 = [s1 stringByTrimmingCharactersInSet:[NSCharacterSet uppercaseLetterCharacterSet]]; // 去掉开头和结尾的特定的字符串 // s1 = [s1 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"http"]];
6,NSString中的一些其他的用法
/** * 字符串转为基本数据类型 * -(double)doubleValue; // - (float)floatValue; * - (int)intValue; * - (char *)UTF8String; // 将OC中的字符串转换为C语言中的字符串在操作SQLite数据库时才会?用到 * - (unichar)characterAtIndex:(NSUInteger)index; // 遍历字符串中的每一个字符根据索引 * - (NSUInteger)length; // 返回字符串的长度,注意仅仅是其中的个数 * - (BOOL)isAbsolutePath; // 是否为绝对路径 * -(NSString*)lastPathComponent; // 获得最后一个目录 * -(NSString*)stringByDeletingLastPathComponent; // 删除最后?一个??目录 * -(NSString*)stringByAppendingPathComponent:(NSString *)str;//在路径的后?面拼接?一个??目录 * - (NSString *)stringByAppendingString; // 给一个字符串拼接字符串,返回一个新的字符串 * -(NSString*)pathExtension; //获得拓展名 * -(NSString*)stringByDeletingPathExtension; // 删除尾部的拓展名 * -(NSString*)stringByAppendingPathExtension:(NSString *)str; //在尾部添加?一个拓展名 */
五:NSMutableString和NSString的区别联系
NSMutableString是NSString得子类
NSString为不可变字符串:不可变是什么意思呢就是创建字符串后不能再给这个字符串添加内容
而实际中我们看到的只不过是指向常量区的指针重新指向了一个新的字符串空间而已。
原文:http://www.cnblogs.com/-boy/p/4093523.html