問題:NSString到底是不是字符串填具?
NSString 是 OC中專門處理字符串的對象!提供了轉(zhuǎn)換大小寫匆骗,拼接字符串攒钳,lastPathComponent等方法辽社!
一.NSString : 不可變字符串
1.字符串的創(chuàng)建
// 創(chuàng)建一個新的空字符串
NSString *string1 = [NSString string];
// C語言字符串
char *name = "hello word";
// 初始化一個字符串审孽,在賦值
NSString *string2 = [[NSString alloc] init];
string2 = @"wangchong";
NSString *string3 = @"hello";
// 一下兩個方法是把字符串做一次拷貝,返回拷貝后的字符串
NSString *string4 = [NSString stringWithString:@"hello"];
NSString *string5 = [[NSString alloc] initWithString:string3];
NSLog(@"%p,%p,%p",&string3,&string4,&string5);
NSString *string6 = [string5 stringByAppendingString:@"\nHi"];
// 把C的字符串轉(zhuǎn)化為OC的字符串
NSString *str = [[NSString alloc] initWithUTF8String:"hello world"];
NSString *str2 = [NSString stringWithUTF8String:"hello world"];
// 用格式化字符串初始化 可完成字符串的拼接以及完成C的字符串與OC的字符串的轉(zhuǎn)化
int a = 123;
NSString *str3 = [[NSString alloc]initWithFormat:@"a = %d %s%@", a, "aaaa", @"bbbb"];
NSString *str4 = [NSString stringWithFormat:@"%s","hello world"];
2.字符串的類型轉(zhuǎn)換
NSString * str = @"hello";
const char *p = [str UTF8String]; // 將OC字符串轉(zhuǎn)化為C的字符串
str = @"123";
int a = [str intValue]; // 將數(shù)字串轉(zhuǎn)化成整型數(shù)據(jù)
[str floatValue]; // 將數(shù)字串轉(zhuǎn)化成float型
[str doubleValue]; // 將數(shù)字串轉(zhuǎn)化成double型
// 結(jié)構(gòu)體 輸出
// 結(jié)構(gòu)體 [點] 轉(zhuǎn)換字符串
NSString *str1 = NSStringFromCGPoint(point);
// 結(jié)構(gòu)體 [尺寸] 轉(zhuǎn)換字符串
NSString *str2 = NSStringFromCGSize(size);
// 結(jié)構(gòu)體 [矩形] 轉(zhuǎn)換字符串
NSString *str3 = NSStringFromCGRect(rect);
3.字符串大小寫轉(zhuǎn)換
<pre name="code" class="objc"> // 全部轉(zhuǎn)為大寫
// 結(jié)果 ABC
[@"abc" uppercaseString];
// 全部轉(zhuǎn)為小寫
// 結(jié)果 bcd
[@"BCD" lowercaseString];
// 首字母大寫
// 結(jié)果 Acb
[@"acb" capitalizedString];
4.字符串比較
// 比較兩個字符串內(nèi)容是否相同
// 相等返回 yes 不相等返回 no
BOOL b =[str isEqualToString:str2];
//判斷str2中是否包含str1
[str2 containsString:str1];
// 忽略大小寫進行比較
NSComparisonResult result1 = [string caseInsensitiveCompare:str];
NSComparisonResult result2 = [string localizedCaseInsensitiveCompare:str];
// 兩個字符串內(nèi)容比較
// NSComparisonResult result = {NSOrderedAscending, NSOrderedSame废岂,NSOrderedDescending}
// NSOrderedAscending 右邊 > 左邊 == -1
// NSOrderedSame 內(nèi)容相同 == 0
// NSOrderedDescending 左邊 > 右邊 == 1
NSComparisonResult result3 = [str compare:str2];
NSComparisonResult result4 = [string compare:@"taojian" options:NSCaseInsensitiveSearch];
NSComparisonResult result5 = [string compare:@"taojian" options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length)];
NSComparisonResult result6 = [string compare:@"taojian" options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length) locale:nil];
NSComparisonResult result7 = [string localizedCompare:str];
options: // 枚舉參數(shù)
enum{
NSCaseInsensitiveSearch = 1, // 不區(qū)分大小寫比較
NSLiteralSearch = 2, // 區(qū)分大小寫比較
NSBackwardsSearch = 4, // 從字符串末尾開始搜索
NSAnchoredSearch = 8, // 搜索限制范圍的字符串?
NSNumbericSearch = 64 // 按照字符串里的數(shù)字為依據(jù),算出順序瓮钥。例如 Foo2.txt < Foo7.txt < Foo25.txt
// 以下定義高于 mac os 10.5 或者高于 iphone 2.0 可用 ,
NSDiacriticInsensitiveSearch = 128, // 忽略 "-" 符號的比較
NSWidthInsensitiveSearch = 256, // 忽略字符串的長度筋量,比較出結(jié)果
NSForcedOrderingSearch = 512 // 忽略不區(qū)分大小寫比較的選項,并強制返回 NSOrderedAscending 或者 NSOrderedDescending
// 以下定義高于 iphone 3.2 可用 ,
/// 只能應(yīng)用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法碉熄。
/// 使用通用兼容的比較方法桨武,如果設(shè)置此項,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearc
NSRegularExpressionSearch = 1024
5.字符串搜索
// 判斷字符串是否以abc開頭
[@"abcdfa" hasPrefix:@"abc"];
// 判斷字符串是否bcd結(jié)尾
[@"adbcd" hasSuffix:@"bcd"];
// 判斷字符串是否包含指定字符串锈津,返回位置和長度
NSRange range = [@"123456" rangeOfString:@"456"];
// 搜索字符串所在的范圍
NSRange range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch]; // 輸出{17, 3}
// 指定范圍進行搜索
NSRange range = NSMakeRange(0, 9);
range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch range:range];
// 找與之開頭相同的字符 返回相同開頭的字符串
NSString *string = @"fg s abcdefg hijklmn s d \n fdsgf";
NSString *str = [string commonPrefixWithString:@"fgsdfgrg" options:NSLiteralSearch]; // 輸出fg
6.字符串截取
<pre name="code" class="objc"><pre name="code" class="objc">NSString * str5 = @"helloworld";
NSString * ptr1 = [str5 substringToIndex:2];// 字符串抽取 從頭開始抽取2個字母,返回he
NSString * ptr2 = [str5 substringFromIndex:4];// 從第4個字母開始抽取到字符串結(jié)束,返回oworld
NSRange range1 = {6,2};// 結(jié)構(gòu)體初始化
NSString * ptr3 = [str5 substringWithRange:range1];// 在range指定范圍內(nèi)抽取,返回or
NSString * ptr4 = [str5 substringWithRange:NSMakeRange(6,2)];// NSMakeRange可以生成一個結(jié)構(gòu)體
// 取出字符串"123-456-789-000"中的數(shù)字部分,組成一個新的字符串輸出
NSMutableString *strm = [NSMutableString stringWithString:@"123-456-789-000"]; //只有可變字符串有這個方法
[strm replaceOccurrencesOfString:@"-"
withString:@""
options:NSLiteralSearch
range:NSMakeRange(0, strm.length)];
NSLog(@"%@",strm); //輸出:123456789000
7.字符串的遍歷
// 根據(jù)\n遍歷
NSString *string = @" s abcdefg hijklmn s d \n fdsf";
// 根據(jù)\n一行一行的打印
[string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop){
NSLog(@"\n%@",line);
}
];
// 根據(jù) 條件options 遍歷
NSString *string = @" s abcdefg hijklmn s d ";
NSMutableString * mutableString = [NSMutableString string];
// NSStringEnumerationByWords:將string按空格分開呀酸,并且會自動清理首尾的空格
// 這個方法會把中間多余的空格也清理掉,比如上面的字符串琼梆,s和d之間有兩個空格性誉,會變成一個空格
[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop)
{
[mutableString appendFormat:@"%@ ",substring];
}];
// 刪除我們添加的末尾的一個空格
[mutableString deleteCharactersInRange:NSMakeRange(outputString.length-1, 1)];
8.路徑操作與數(shù)組操作
// 用指定字符串分割字符串,返回一個數(shù)組
NSArray *array = [@"1,2,3,4,5,6" componentsSeparatedByString:@","];
// 根據(jù)空格拆分
NSArray *array = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// 將數(shù)組中的字符串組合成一個文件路徑
NSMutableArray *components = [NSMutableArray array];
[components addObject:@"Users"];
[components addObject:@"CentralPerk"];
[components addObject:@"Desktop"];
NSString *path = [NSString pathWithComponents:components];
NSLog(@"%@",path); //Users/CentralPerk/Desktop
// 將一個路徑分割成一個數(shù)組
NSArray *array1 = [path pathComponents];
NSLog(@"%@",array1);
// 判斷是否為絕對路徑(依據(jù):是否以'/'開始)
path = @"/Users/CentralPerk/Desktop";
NSLog(@"%i",[path isAbsolutePath]);
// 獲取最后一個目錄
NSLog(@"%@",[path lastPathComponent]);
// 刪除最后一個目錄
NSLog(@"%@",[path stringByDeletingLastPathComponent]);
// 拼接一個目錄
NSLog(@"%@",[path stringByAppendingPathComponent:@"aaa"]); //Users/CentralPerk/Desktop/aaa
NSLog(@"%@",[path stringByAppendingString:@"aaa"]); //Users/CentralPerk/Desktopaaa
NSLog(@"%@",[path stringByAppendingFormat:@"%@%@",@"b",@"c"]); //Users/CentralPerk/Desktopbc
9.文件擴展名
// 拓展名出來
// 獲取拓展名,不帶.
NSString *str2 = @"Users/CentralPerk/Desktop/test.txt";
NSLog(@"%@",[str2 pathExtension]);
// 添加拓展名,不需要帶.
NSLog(@"%@",[str2 stringByAppendingPathExtension:@"mp3"]);
// 刪除拓展名,帶.一塊刪除
NSLog(@"%@",[str2 stringByDeletingPathExtension]);
10.文件操作
// 將字符串設(shè)置為path制定的文件的內(nèi)容
-(id) initWithContentsOfFile:path encoding:enc error:err
// 創(chuàng)建一個新字符串并將其設(shè)置為path指定的文件的內(nèi)容茎杂,使用字符編碼enc错览,如果非零,則返回err中錯誤
+(id) stringWithContentsOfFile:path encoding:enc error:err
// 將字符串設(shè)置為url(NSURL *)url的內(nèi)容煌往,使用字符編碼enc倾哺,如果非零,則返回err中的錯誤
-(id) initWithContentsOfURL:url encoding:enc error:err
// 創(chuàng)建一個新的字符串,并將其設(shè)置為url的內(nèi)容羞海,使用字符編碼enc闲勺,如果非零,則返回err中的錯誤
+(id) stringWithContentsOfURL:url encoding:enc error:err
11.補充
// 求字符串長度
[str1 length]
// 獲取字符串中的字符
[str1 characterAtIndex:1]
// 清楚左右兩段的空格
NSString *str = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// 在字符串后面補0
NSString *str = [string stringByPaddingToLength:12 withString:@"0" startingAtIndex:0];
二扣猫、NSMutableString
// 將不可變的字符串轉(zhuǎn)換為可變的字符串
NSMutableString * str = [[NSMutableString alloc]initWithString:@"hello world"];
// 在指定下標為2的(不要越界)位置插入013字符串
[str insertString:@"013" atIndex:2];
// 在字符串末尾追加字符串taotao
[str appendString:@"taotao"];
// 從0位置刪除2個字符
[str deleteCharactersInRange:NSMakeRange(0, 2)];
// 給字符串重新賦值
[str setString:@"yintian"];
// 將3位置后1個字符替換成ios字符串
[str replaceCharactersInRange:NSMakeRange(3, 1) withString:@"ios"];
// 根據(jù)選項 opts ,使用指定 range 中的nsstring2 替換所有的 nsstring
-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range