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的時候,若是路徑中有中文字符則,報錯!api
3,若是路徑中有中文,則使用另一個方法來建立:數組
NSURL *url = [NSURL fileURLWithPath:@"/Users/ll/Desktop/資料/text.txt」]; 而fileURLWithPath方法中不須要加file://網絡
四:NSString中的一些方法app
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的比較方法this
// 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的截取和替換atom
// 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,url
/** * 去除全部的空格 [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爲不可變字符串:不可變是什麼意思呢就是建立字符串後不能再給這個字符串添加內容
而實際中咱們看到的只不過是指向常量區的指針從新指向了一個新的字符串空間而已。
//================ NSMutableString的用法 // 1,建立NSMutableString,是可變字符串 NSMutableString *strM = [NSMutableString string]; NSLog(@"strM = %p", strM); // 結果: 0x10010b030 // 2,拼接字符串到最後面 [strM appendString:@"hello china"]; [strM appendString:@" world "]; NSLog(@"strM = %p, strM = %@", strM, strM); // 結果地址 0x10010b030 /** * 注意:上面建立的strM的地址相同,說明NSMutalbeString是一個可變字符串 * 而NSString是一個不可變字符串,它會將建立的對象的地址從新賦值給str */ // 3,拼接一段格式化字符串,固然也是拼接到後面 [strM appendFormat:@"%d", 2014]; NSLog(@"strM = %@", strM); // 結果 strM = hello china world 2014 // 4, 刪除 刪除range範圍內的字符串。通常能夠配合rangeOfString刪除。 NSRange range1 = NSMakeRange(3, 4); [strM deleteCharactersInRange:range1]; NSLog(@"%@", strM); // 結果 helhina world 2014 // 5,插入 在指定位置插入字符串 [strM insertString:@"你好" atIndex:3]; NSLog(@"strM = %@", strM); // 結果 strM = hel你好hina world 2014 // 6,替換 用字符串替換原字符串指定範圍內字符串 NSRange range = NSMakeRange(3, 2); [strM replaceCharactersInRange:range withString:@"lo c"]; NSLog(@"strM = %@", strM); // 結果 strM = hello china world 2014 // 7,注意點 strM.string = @"哈哈"; NSLog(@"strM = %@", strM); // 結果:strM = 哈哈 /** * 緣由:由於@「哈哈" 這樣建立的字符串是一個不可變字符串,會把strM中的覆蓋掉 NSMutableString *s1M = @"hello world"; [s1M appendString:@"你好,世界!"]; // 錯誤,由於實際上s1M是一個NSString類型,NSString類型是沒appendString方法的。 NSLog(@"%@", s1M); */
注意點:
NSMutableString *s1M = @"hello world"; [s1M appendString:@"你好,世界!"]; // 錯誤,由於實際上s1M是一個NSString類型,NSString類型是沒appendString方法的。