前言
@interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
@interface NSMutableString : NSString
一、不可變字符串的建立
// 直接建立不可變字符串
/*
在 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];
二、字符串長度計算
NSString *str1 = @"zhou dong yu";
// 計算字數長度,不是字符長度
NSUInteger length = [str1 length];
三、字符串成員的引用(取字符)
NSString *str1 = @"zhou dong yu";
// 取第 4 個字符
unichar character = [str1 characterAtIndex:3];
四、字符串的拼接
NSString *str1 = @"chen chao ";
NSString *str2 = @"shuai";
// stringByAppendingString
NSString *str3 = [str1 stringByAppendingString:str2];
// stringByAppendingFormat
NSString *str4 = [str1 stringByAppendingFormat:@"%@", str2];
五、字符串比較
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");
}
六、字符串前綴和後綴的判斷
NSString *fileName = @"file.txt";
// 前綴
BOOL bl1 = [fileName hasPrefix:@"file"];
// 後綴
BOOL bl2 = [fileName hasSuffix:@".txt"];
七、字符串大小寫字符的轉換
NSString *str = @"chEN Chao";
// 轉大寫
NSString *str1 = [str uppercaseString];
// 轉小寫
NSString *str2 = [str lowercaseString];
// 單詞首字母大寫
NSString *str3 = [str capitalizedString];
八、字符串轉數字
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];
九、在字符串中查找子串的位置
NSString *str1 = @"bei jing nin hao nin hao";
NSString *str2 = @"ninn";
// 一、從前日後查找,找到第一個即中止查找
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);
}
// 二、條件查找
/*
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);
}
// 三、在某個範圍內查找
// 查找範圍
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);
}
十、字符串子串的提取(取子串)
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];
十一、字符串切割/組合
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];
十二、可變字符串的建立
// 不可變字符串中有的方法
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];
1三、字符串的添加
NSMutableString *str = [NSMutableString stringWithCapacity:0];
// 追加
[str appendString:@"bei jing"];
// 格式化追加
[str appendFormat:@", age is %d", 18];
// 插入
[str insertString:@" ren min" atIndex:8];
1四、字符串修改(覆蓋重寫)
NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"我是大大的好人"];
// 修改整個字符串(覆蓋重寫)
[str setString:@"bei jing huan ying nin"];
1五、字符串的刪除
NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];
NSRange range = [str rangeOfString:@"ren min "];
[str deleteCharactersInRange:range];
1六、字符串替換
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 // 使用正則表達式搜索
*/
1七、字符串的導出
// 文件路徑
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(@"寫入成功");
}
1八、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"];
1九、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]];
2一、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];
2二、NSString 與 Class 的相互轉換
// NSString 轉 Class
Class ClassName = NSClassFromString(@"Student");
Student *stu = [[ClassName alloc] init];
[stu studentTest];
// Class 轉 NSString
NSString *strintFromClass = NSStringFromClass([Student class]);
2三、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));
2四、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));
2五、NSString 與 NSRange 的相互轉換
NSRange range4 = NSMakeRange(9, 4);
// NSRange 轉 NSString
NSString *stringFronRange = NSStringFromRange(range4);
// NSString 轉 NSRange
NSRange range5 = NSRangeFromString(stringFronRange);
2六、NSString 與 NSPoint 的相互轉換
NSPoint point5 = NSMakePoint(9, 4);
// NSPoint 轉 NSString
NSString *stringFronPoint = NSStringFromPoint(point5);
// NSString 轉 NSPoint
NSPoint point6 = NSPointFromString(stringFronPoint);
2七、NSString 與 NSSize 的相互轉換
NSSize size5 = NSMakeSize(9, 4);
// NSSize 轉 NSString
NSString *stringFronSize = NSStringFromSize(size5);
// NSString 轉 NSSize
NSSize size6 = NSSizeFromString(stringFronSize);
2八、NSString 與 NSRect 的相互轉換
NSRect rect5 = NSMakeRect(9, 4, 4, 9);
// NSRect 轉 NSString
NSString *stringFronRect = NSStringFromRect(rect5);
// NSString 轉 NSRect
NSRect rect6 = NSRectFromString(stringFronRect);
2九、生成隨機數
// 生成 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;
}