前言

	@interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
@interface NSMutableString : NSString

1、不可變字串的建立

	// 直接建立不可變字串
/*
在 OC 中,使用 @"XXX" 格式定義的字串,是儲存在常量區的,只要內容相同,記憶體地址就一致
*/
NSString *string1 = @"bei jing huan ying nin"; // 物件方法建立字串 NSString *string2 = [[NSString alloc] init]; // 用另一個字串初始化當前字串,和 string1 的地址相同
NSString *string3 = [[NSString alloc] initWithString:string1]; // 通過格式化控制初始化字串
NSString *string4 = [[NSString alloc] initWithFormat:@"age is %d, name is %@", 18, @"chen chao"]; // 類方法建立字串 NSString *string5 = [NSString string]; // 用另一個字串初始化當前字串,和 string1 的地址相同
NSString *string6 = [NSString stringWithString:string1]; // 通過格式化控制初始化字串
NSString *string7 = [NSString stringWithFormat:@"age is %d, name is %@", 18, @"chen chao"]; // 由 C 語言的字串建立字串
NSString *string8 = [[NSString alloc] initWithCString:"bei jing nin hao" encoding:NSUTF8StringEncoding];
NSString *string9 = [[NSString alloc] initWithUTF8String:"bei jing huan ying nin"]; NSString *string10 = [NSString stringWithCString:"bei jing nin hao" encoding:NSUTF8StringEncoding];
NSString *string11 = [NSString stringWithUTF8String:"bei jing huan ying nin"]; // 從 檔案 建立字串
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]; NSString *string12 = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
NSString *string13 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL]; // 從 Url 建立字串
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; NSString *string14 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];
NSString *string15 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];

2、字串長度計算

	NSString *str1 = @"zhou dong yu";

	// 計算字數長度,不是字元長度
NSUInteger length = [str1 length];

3、字串成員的引用(取字元)

	NSString *str1 = @"zhou dong yu";

	// 取第 4 個字元
unichar character = [str1 characterAtIndex:3];

4、字串的拼接

	NSString *str1 = @"chen chao ";
NSString *str2 = @"shuai"; // stringByAppendingString
NSString *str3 = [str1 stringByAppendingString:str2]; // stringByAppendingFormat
NSString *str4 = [str1 stringByAppendingFormat:@"%@", str2];

5、字串比較

	NSString *str1 = @"chen chao";
NSString *str2 = @"CHEN CHAO"; // isEqualToString BOOL bl = [str1 isEqualToString:str2]; if (bl) { // 相等
NSLog(@"str1 = str2");
}
else { // 不等
NSLog(@"str1 != str2");
} // compare NSComparisonResult result1 = [str1 compare:str2]; if (result1 == NSOrderedAscending) { // 小於 -1
NSLog(@"str1 < str2");
}
else if (result1 == NSOrderedSame){ // 等於 0
NSLog(@"str1 = str2");
}
else{ // 大於 1 NSOrderedDescending
NSLog(@"str1 > str2");
} // caseInsensitiveCompare // 忽略大小寫比較 NSComparisonResult result2 = [str1 caseInsensitiveCompare:str2]; if (result2 == NSOrderedAscending) { // 小於 -1
NSLog(@"str1 < str2");
}
else if (result2 == NSOrderedSame){ // 等於 0
NSLog(@"str1 = str2");
}
else{ // 大於 1 NSOrderedDescending
NSLog(@"str1 > str2");
}

6、字串字首和字尾的判斷

	NSString *fileName = @"file.txt";

	// 字首
BOOL bl1 = [fileName hasPrefix:@"file"]; // 字尾
BOOL bl2 = [fileName hasSuffix:@".txt"];

7、字串大小寫字元的轉換

	NSString *str = @"chEN Chao";

	// 轉大寫
NSString *str1 = [str uppercaseString]; // 轉小寫
NSString *str2 = [str lowercaseString]; // 單詞首字母大寫
NSString *str3 = [str capitalizedString];

8、字串轉數字

	NSString *str = @"12306";

	int intValue = [str intValue];

	double doubleValue = [str doubleValue];

	float floatValue = [str floatValue];

	BOOL boolValue = [str boolValue];

	NSInteger integerValue = [str integerValue];

	long long longLongValue = [str longLongValue];

9、在字串中查詢子串的位置

	NSString *str1 = @"bei jing nin hao nin hao";
NSString *str2 = @"ninn"; // 1、從前往後查詢,找到第一個即停止查詢 NSRange range1 = [str1 rangeOfString:str2]; // 或者 if(range1.length == 0)
if (range1.location == NSNotFound) { NSLog(@"沒有找到 %@", NSStringFromRange(range1));
}
else{ // location 位置,length 長度
NSLog(@"%lu %lu", range1.location, range1.length);
} // 2、條件查詢 /*
NSCaseInsensitiveSearch = 1, // “A”等同於“a”,不分大小寫查詢
NSLiteralSearch = 2, // Unicode 的點對點比較。它只在所有字元都用相同的方式組成的情況下才會返回相等。
NSBackwardsSearch = 4, // 在字串的末尾開始反向搜尋
NSAnchoredSearch = 8, // 只考慮搜尋的起始點(單獨使用)或終止點(當與 NSBackwardsSearch 結合使用時)。
這個方法可以用來檢查字首或者字尾,以及大小寫不敏感(case-insensitive)或者
音調不敏感(diacritic-insensitive)的比較。 NSNumericSearch = 64, // 它對字串裡的數字排序 NSDiacriticInsensitiveSearch = 128, // “A” 等同於 “Å” 等同於 “Ä.”
NSWidthInsensitiveSearch = 256, // 一些東亞文字(平假名和片假名)有全寬與半寬兩種形式
NSForcedOrderingSearch = 512,
NSRegularExpressionSearch = 1024 // 使用正則表示式搜尋
*/ // 從後往前查詢,找到第一個即停止查詢
NSRange range2 = [str1 rangeOfString:str2 options:NSBackwardsSearch]; if (range2.location == NSNotFound) {
NSLog(@"沒有找到 %@", NSStringFromRange(range2));
} else {
NSLog(@"%lu %lu", range2.location, range2.length);
} // 3、在某個範圍內查詢 // 查詢範圍
NSRange range = {8, 10}; NSRange range3 = [str1 rangeOfString:str2 options:NSCaseInsensitiveSearch range:range]; if (range3.location == NSNotFound) {
NSLog(@"沒有找到 %@", NSStringFromRange(range3));
} else {
NSLog(@"%lu %lu", range3.location, range3.length);
}

10、字串子串的提取(取子串)

	NSString *str = @"今天天氣真不錯,是風和日麗的,我們下午沒有課,是心情也不錯";

	// 從某個位置開始到結尾
NSString *str1 = [str substringFromIndex:17]; // 從開始到某個位置
NSString *str2 = [str substringToIndex:7]; // 某個範圍內
NSRange range = {7, 10};
NSString *str3 = [str substringWithRange:range]; NSRange range1 = [str rangeOfString:@"我們下午沒有課"];
NSString *str4 = [str substringFromIndex:range1.location];

11、字串切割/組合

	NSString *str1 = @"chen$chao$ni$hao$ma";
NSString *str2 = @"bei$jing#ni@hao&ma";
NSString *str3 = @"Users/JHQ0228/Desktop"; // 字串 按照字元 切割
NSArray *arr1 = [str1 componentsSeparatedByString:@"$"]; // 字串 按照字符集 切割
NSArray *arr2 = [str2 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"$#@&"]]; // 將字串 路徑分割
/*
自動按照 "/" 分割字串
*/
NSArray *arr3 = [str3 pathComponents]; // 字串 組合
NSString *str4 = [arr1 componentsJoinedByString:@" "];
NSString *str5 = [arr2 componentsJoinedByString:@" "]; // 字串 路徑組合
/*
將陣列中的元素自動組合成路徑,在每個元素之間自動加上 “/”
*/
NSString *str6 = [NSString pathWithComponents:arr3];

12、可變字串的建立

    // 不可變字串中有的方法

	    NSMutableString *str1 = [[NSMutableString alloc] init];

	    // 和 str1 的地址不同
NSMutableString *str2 = [[NSMutableString alloc] initWithString:str1]; // 和 str1 的地址不同
NSMutableString *str3 = [NSMutableString stringWithString:str1]; // 物件方法建立
/*
建立指定長度字串,預先分配儲存空間,提高效率,字串實際長度可大於指定的長度
*/
NSMutableString *str4 = [[NSMutableString alloc] initWithCapacity:0]; // 類方法建立
/*
建立指定長度字串,預先分配儲存空間,提高效率,字串實際長度可大於指定的長度
*/
NSMutableString *str5 = [NSMutableString stringWithCapacity:0];

13、字串的新增

	NSMutableString *str = [NSMutableString stringWithCapacity:0];

	// 追加
[str appendString:@"bei jing"]; // 格式化追加
[str appendFormat:@", age is %d", 18]; // 插入
[str insertString:@" ren min" atIndex:8];

14、字串修改(覆蓋重寫)

	NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"我是大大的好人"];

	// 修改整個字串(覆蓋重寫)
[str setString:@"bei jing huan ying nin"];

15、字串的刪除

	NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];

	NSRange range = [str rangeOfString:@"ren min "];
[str deleteCharactersInRange:range];

16、字串替換

	NSMutableString *str1 = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];

	// 替換字串
[str1 replaceCharactersInRange:[str1 rangeOfString:@"huan ying nin"] withString:@"ni hao ma"]; // 查詢並替換字串
[str1 replaceOccurrencesOfString:@"i" withString:@"X" options:NSLiteralSearch range:NSMakeRange(0, [str1 length])]; /*
NSCaseInsensitiveSearch = 1, // “A”等同於“a”,不分大小寫查詢
NSLiteralSearch = 2, // Unicode 的點對點比較。它只在所有字元都用相同的方式組成的情況下才會返回相等。
NSBackwardsSearch = 4, // 在字串的末尾開始反向搜尋
NSAnchoredSearch = 8, // 只考慮搜尋的起始點(單獨使用)或終止點(當與 NSBackwardsSearch 結合使用時)。
這個方法可以用來檢查字首或者字尾,以及大小寫不敏感(case-insensitive)或者
音調不敏感(diacritic-insensitive)的比較。
NSNumericSearch = 64, // 它對字串裡的數字排序
NSDiacriticInsensitiveSearch = 128, // “A” 等同於 “Å” 等同於 “Ä.”
NSWidthInsensitiveSearch = 256, // 一些東亞文字(平假名和片假名)有全寬與半寬兩種形式
NSForcedOrderingSearch = 512,
NSRegularExpressionSearch = 1024 // 使用正則表示式搜尋
*/

17、字串的匯出

	// 檔案路徑
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/string.txt"]; // 待匯出字串
NSString *str = @"bei jing ni hao"; // 匯出字串 /*
- (BOOL)writeToFile:(NSString *)path
atomically:(BOOL)useAuxiliaryFile
encoding:(NSStringEncoding)enc
error:(NSError **)error; atomically:原子性,
YES:原子性操作,資料寫入檔案時先寫入臨時檔案,待資料全部寫入臨時檔案後,再建立並將資料
從臨時檔案全部剪下到目標檔案中。若寫入過程中(指往臨時檔案中寫入)發生錯誤,會刪除臨時檔案。
NO:非原子性操作,資料寫入檔案時直接建立並寫入目標檔案。
若寫入過程中發生錯誤,會停止寫入,不會刪除目標檔案,並且不會刪除已寫入的資料。
error:錯誤資料。error == nil 時寫入成功。 檔案不存在時會自動建立,資料夾不存在時會寫入錯誤。
*/ // 不判斷是否寫入成功 [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil]; // 判斷是否寫入成功 NSError *error; [str writeToFile:[NSHomeDirectory() stringByAppendingString:@"/Desktop/str/string.txt"]
atomically:YES encoding:NSUTF8StringEncoding
error:&error]; if (error) { NSLog(@"寫入失敗:%@", error); // 列印主要錯誤資訊
NSLog(@"寫入失敗:%@", [error localizedDescription]);
} else {
NSLog(@"寫入成功");
}

18、OC 字串與 C 字串的相互轉換

	// OC 字串轉 C 字串
const char *CString = [@"bei jing ni hao" UTF8String]; // C 字串轉 OC 字串
NSString *OCString1 = [[NSString alloc] initWithCString:"ni hao" encoding:NSUTF8StringEncoding];
NSString *OCString2 = [[NSString alloc] initWithUTF8String:"ni hao"]; NSString *OCString3 = [NSString stringWithCString:"ni hao" encoding:NSUTF8StringEncoding];
NSString *OCString4 = [NSString stringWithUTF8String:"ni hao"];

19、NSString 與 NSData 的相互轉換

	NSString *string = @"bei jing nin hao";

	// NSString 轉 NSData
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; // data 型別資料以十六進位制的形式打印出
NSLog(@"%@", data); // data 型別資料以字串的形式打印出
NSLog(@"%s", data.bytes); // NSData 轉 NSString
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

20、NSString 與 NSNumber 的相互轉換

	NSNumber *num1 = @10.456;

	// NSNumber 轉換 NSString
NSString *str = [num1 stringValue]; // NSString 轉 NSNumber
NSNumber *num2 = [NSNumber numberWithFloat:[str floatValue]];

21、NSString 與 NSDate 的相互轉換

	NSDateFormatter *dfm = [[NSDateFormatter alloc] init];
dfm.dateFormat = @"yyyy年MM月dd日 HH點mm分ss秒";
dfm.locale = [NSLocale localeWithLocaleIdentifier:@"GMT+8"]; // NSString 轉 NSDate
NSDate *date = [dfm dateFromString:@"2016年05月24日 17點38分03秒"]; // NSDate 轉 NSString
NSString *str = [dfm stringFromDate:date];

22、NSString 與 Class 的相互轉換

	// NSString 轉 Class
Class ClassName = NSClassFromString(@"Student"); Student *stu = [[ClassName alloc] init];
[stu studentTest]; // Class 轉 NSString
NSString *strintFromClass = NSStringFromClass([Student class]);

23、NSString 與 方法名 的相互轉換

	// NSString 轉 方法名
SEL selName = NSSelectorFromString(@"studentTest"); // 消除 performSelector: 方法警告
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" Student *stu = [[Student alloc] init];
[stu performSelector:selName]; #pragma clang diagnostic pop // 方法名 轉 NSString
NSString *stringFromSel = NSStringFromSelector(@selector(studentTest));

24、NSString 與 NSProtocol 的相互轉換

	// NSString 轉 NSProtocol
Protocol *ptlName = NSProtocolFromString(@"NSCopying"); Student *stu = [[Student alloc] init];
BOOL conforms = [stu conformsToProtocol:ptlName]; // NSProtocol 轉 NSString
NSString *stringFromProtocol = NSStringFromProtocol(@protocol(NSCopying));

25、NSString 與 NSRange 的相互轉換

	NSRange range4 = NSMakeRange(9, 4);

	// NSRange 轉 NSString
NSString *stringFronRange = NSStringFromRange(range4); // NSString 轉 NSRange
NSRange range5 = NSRangeFromString(stringFronRange);

26、NSString 與 NSPoint 的相互轉換

	NSPoint point5 = NSMakePoint(9, 4);

	// NSPoint 轉 NSString
NSString *stringFronPoint = NSStringFromPoint(point5); // NSString 轉 NSPoint
NSPoint point6 = NSPointFromString(stringFronPoint);

27、NSString 與 NSSize 的相互轉換

	NSSize size5 = NSMakeSize(9, 4);

	// NSSize 轉 NSString
NSString *stringFronSize = NSStringFromSize(size5); // NSString 轉 NSSize
NSSize size6 = NSSizeFromString(stringFronSize);

28、NSString 與 NSRect 的相互轉換

	NSRect rect5 = NSMakeRect(9, 4, 4, 9);

	// NSRect 轉 NSString
NSString *stringFronRect = NSStringFromRect(rect5); // NSString 轉 NSRect
NSRect rect6 = NSRectFromString(stringFronRect);

29、生成隨機數

	// 生成 15 位長度的數字字母組合的隨機數
- (NSString *)generateTradeNO { static int kNumber = 15; NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSMutableString *resultStr = [[NSMutableString alloc] init];
srand((unsigned)time(0));
for (int i = 0; i < kNumber; i++)
{
unsigned index = rand() % [sourceStr length];
NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
[resultStr appendString:oneStr];
} return resultStr;
}