NSString超全總結(jié)

問題: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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翘地,一起剝皮案震驚了整個濱河市申尤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衙耕,老刑警劉巖昧穿,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橙喘,居然都是意外死亡时鸵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門厅瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饰潜,“玉大人,你說我怎么就攤上這事和簸∨砦恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵锁保,是天一觀的道長薯酝。 經(jīng)常有香客問我,道長爽柒,這世上最難降的妖魔是什么吴菠? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浩村,結(jié)果婚禮上做葵,老公的妹妹穿的比我還像新娘。我一直安慰自己心墅,他們只是感情好蜂挪,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗓化,像睡著了一般棠涮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刺覆,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天严肪,我揣著相機與錄音,去河邊找鬼。 笑死驳糯,一個胖子當(dāng)著我的面吹牛篇梭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酝枢,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恬偷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帘睦?” 一聲冷哼從身側(cè)響起袍患,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竣付,沒想到半個月后诡延,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡古胆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年肆良,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逸绎。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡惹恃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棺牧,到底是詐尸還是另有隱情座舍,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布陨帆,位于F島的核電站曲秉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疲牵。R本人自食惡果不足惜承二,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纲爸。 院中可真熱鬧亥鸠,春花似錦、人聲如沸识啦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颓哮。三九已至家妆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冕茅,已是汗流浹背伤极。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工蛹找, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哨坪。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓庸疾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親当编。 傳聞我的和親對象是個殘疾皇子届慈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容