NSString的用法

1.創(chuàng)建字符串對象

    //1.通過字符串常量創(chuàng)建
    //注意:如果是通過字符串常量創(chuàng)建對象,并且字符串常量的內(nèi)容一致,那么如果創(chuàng)建多個(gè)字符串對象,那么多個(gè)對象指向同一塊存儲空間,如果是通過字符串常量創(chuàng)建,那么字符串對象存儲在常量區(qū)中
    NSString *str1 = @"lnj";
    NSString *str11 = @"lnj";
    NSLog(@"str1 = %p, str11 = %p", str1 ,str11);
    
    //2.通過alloc init創(chuàng)建
    //只要調(diào)用alloc就會(huì)在堆內(nèi)存中開辟一塊存儲空間,不同的編譯器存儲的方式也不一樣,如果是Xcode6以下并且是在iOS平臺,那么每次alloc都會(huì)創(chuàng)建一個(gè)新的對象,如果是在Xcode6以上那么alloc多次指向同一塊存儲空間
    NSString *str2 = [[NSString alloc]initWithFormat:@"lmj"];
    NSString *str22 = [[NSString alloc]initWithFormat:@"lmj"];
   
    NSLog(@"str2 = %p, str22 = %p", str2, str22);
    
    //3.通過類工廠方法創(chuàng)建/ stringWithFormat
    //內(nèi)部其實(shí)就是封裝了alloc init
    NSString *str3 = [NSString stringWithFormat:@"zs"];
    NSString *str33= [NSString stringWithFormat:@"zs"];
    
    
    /*
     也會(huì)存儲在常量區(qū)中,和通過字符串常量創(chuàng)建的完全相同
     */
    
    NSString *str4 = [[NSString alloc]initWithString:@"ls"];
    NSString *str44 = [[NSString alloc]initWithString:@"ls"];
    NSLog(@"str4 = %p, str44 = %p", str4, str44);

2.字符串文件讀寫

(1)從文件中讀取字符串
    NSString *path = @"/Users/taowai/Desktop/zf.rtf";
    NSError *error = nil;
    
    // 從文件中讀取字符串
    
    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    if (error == nil) {
        
        NSLog(@"str = %@", str);
    }else
    {
        NSLog(@"error = %@", [error localizedDescription]);
    }
(2)將字符串寫入到文件中
    // 將字符串寫入到文件中
    NSString *str = @"iOS0601基礎(chǔ)班";
    // atomically 如果傳入YES, 字符串寫入文件的過程中如果沒有寫完, 那么不會(huì)生成文件
    //            如果傳入NO, 字符串寫入文件的過程中如果沒有寫完, 會(huì)生成文件
    NSString *path2 = @"/Users/taowai/Desktop/abc.txt";
    BOOL flag = [str writeToFile:path2 atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"flag = %i", flag);
(3)創(chuàng)建URL

協(xié)議頭 + 主機(jī)地址 + 文件路徑

     NSString *path = @"file://192.168.199.199/Users/NJ-Lee/Desktop/lnj.txt";
     NSString *path = @"http://www.baidu.com";
     //注意:如果加載的資源是本機(jī)上的資源,那么URL中的主機(jī)地址可以省略
     //雖然主機(jī)地址可以省略,但是需要注意,文件路勁中最前面的/不能省略,文件路徑最前面的/代表根路徑
     //    NSString *path = @"file:///Users/NJ-Lee/Desktop/lnj.txt";
     //    NSURL *url = [NSURL URLWithString:path];
    //注意:如果是通過NSURL的fileURLWithPath:方法創(chuàng)建URL,那么系統(tǒng)會(huì)自動(dòng)給我們傳入的字符串添加協(xié)議頭(file://),所以字符串中不需要再寫file://
     //    注意:開發(fā)中一般情況下,如果是訪問本機(jī)的資源,創(chuàng)建URL的時(shí)候,建議使用fileURLWithPath方法創(chuàng)建
     //    因?yàn)閡rl不支持中文,如果URL中包含中文,那么無法訪問;但是如果是通過fileURLWithPath方法創(chuàng)建URL,哪怕URL中包含中文也可以進(jìn)行訪問,系統(tǒng)內(nèi)部會(huì)自動(dòng)對URL中包含的中文進(jìn)行處理
      NSURL *url = [NSURL fileURLWithPath:path];
(4)通過URL讀取文件
     NSString *path = @"file:///Users/NJ-Lee/Desktop/未命名文件夾/lnj.txt";
     //如果URL中包含中文,又非不通過fileURLWithPath創(chuàng)建,也可以破
     //如果想破就必須在創(chuàng)建URL之前先對字符串中的中文進(jìn)行處理,進(jìn)行百分號編碼
     NSLog(@"處理前:%@", path);
     path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     NSLog(@"處理后:%@", path);
     
     NSURL *url = [NSURL URLWithString:path];
     NSLog(@"url = %@", url);
     
     //2.根據(jù)URL加載文件中的字符串
     NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
     
     NSLog(@"str = %@", str);
(5)通過URL寫入文件
    NSString *str = @"lnj";
    //    NSString *path = @"file:///Users/NJ-Lee/Desktop/未命名文件夾/abc.txt";
    //    path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //    NSURL *url = [NSURL URLWithString:path];
    
    NSString *path = @"/Users/NJ-Lee/Desktop/未命名文件夾/abc.txt";
    NSURL *url = [NSURL fileURLWithPath:path];
    [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    //注意點(diǎn):如果多次往同一個(gè)文件中寫入內(nèi)容,那么后一次的會(huì)覆蓋前一次的
    NSString *str2 = @"xxoo";
    [str2 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

3.字符串比較

(1)比較兩個(gè)字符串是否相等
    NSString *str1 = @"abc";
    NSString *str2 = @"ABC";


// 比較兩個(gè)字符串的"內(nèi)容"是否相同
    BOOL flag = [str1 isEqualToString:str2];
    NSLog(@"flag = %i", flag);
    
    // 下面這個(gè)方法, 是比較兩個(gè)字符串的"地址"是否相同
    flag = (str1 == str2);
    NSLog(@"flag = %i", flag);
(2)比較字符串的大小
    // NSOrderedAscending  前面的小于后面的
    // NSOrderedSame,  兩個(gè)字符串相等
    // NSOrderedDescending  前面的大于后面的
    switch ([str1 compare:str2]) {
        case NSOrderedAscending:
            NSLog(@"str1小于str2");
            break;
        case NSOrderedSame:
            NSLog(@"str1等于str2");
            break;
        case NSOrderedDescending:
            NSLog(@"str1大于str2");
            break;
        default:
            break;
    }

// 忽略大小寫進(jìn)行比較
    switch ([str1 caseInsensitiveCompare:str2]) {
        case NSOrderedAscending:
            NSLog(@"str1小于str2");
            break;
        case NSOrderedSame:
            NSLog(@"str1等于str2");
            break;
        case NSOrderedDescending:
            NSLog(@"str1大于str2");
            break;
        default:
            break;
    }

4.字符串搜索

(1)判斷是否以什么開頭
// 本質(zhì)就是從字符串的第一個(gè)字符開始匹配, 只要不匹配就返回NO
    if ([str hasPrefix:@"http://"]) {
        NSLog(@"是一個(gè)URL");
    }else
    {
        NSLog(@"不是一個(gè)URL");
    }

(2)判斷是否以什么結(jié)尾
// 本質(zhì)就是從字符串的最后一個(gè)字符開始匹配, 只要不匹配就返回NO
    if ([str hasSuffix:@".gif"]) {
        NSLog(@"動(dòng)態(tài)圖片");
    }else{
        NSLog(@"不是動(dòng)態(tài)圖片");
    }
(3)判斷字符串中是否包含a
    NSString *str = @"abcd";
    // 只要str中包含該字符串, 那么就會(huì)返回該字符串在str中的起始位置以及該字符串的長度
    // location從0開始 , length從1開始
    // 如果str中沒有需要查找的字符串, 那么返回的range的length=0, location = NSNotFound
    NSRange range =  [str rangeOfString:@"a"];
    //    if (range.location == NSNotFound) {
    if (range.length == 0){
        NSLog(@"str中沒有需要查找的字符串");
    }else{
        NSLog(@"str中有需要查找的字符串");
        NSLog(@"location = %lu, length = %lu", range.location, range.length);
    }

5.字符串截取

NSString *newStr = [str substringWithRange:range];
 // 從什么地方開始截取, 一直截取到最后
NSString *newStr = [str substringFromIndex:6];
// 從開頭開始截取, 一直截取到什么位置
NSString *newStr = [str substringToIndex:6];

6.字符串替換

(1)需求: 將&符號替換為/
    NSString *str = @"http:&&www.520it.com&img&lnj.gif";
    
    // OccurrencesOfString: 要替換誰
    // withString: 用誰替換
    NSString *newStr = [str stringByReplacingOccurrencesOfString:@"&" withString:@"/"];
    NSLog(@"newStr = %@", newStr);
(2)替換首尾
//    NSString *str = @"   http:&&www.520it.com&img&lnj.gif   ";
//    NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
//    NSString *newStr = [str stringByTrimmingCharactersInSet:set];
    NSString *str = @"HTTP://www.520it.com/img/LNJ.GIF";
    NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet];
    NSString *newStr = [str stringByTrimmingCharactersInSet:set];
    NSLog(@"newStr = |%@|", newStr);
// 去掉首尾空格和換行
NSString *str = [self.messages.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

7.字符串與路徑

(1)判斷是否是絕對路徑
    // 其實(shí)本質(zhì)就是判斷字符串是否以/開頭
    if([str isAbsolutePath])
    {
        NSLog(@"是絕對路徑");
    }else{
        NSLog(@"不是絕對路徑");
    }
(2)獲取文件路徑中的最后一個(gè)目錄
   // 本質(zhì)就是獲取路徑中最后一個(gè)/后面的內(nèi)容
    NSString *newStr = [str lastPathComponent];
    NSLog(@"%@", newStr);
(3)刪除文件路徑中的最后一個(gè)目錄
   // 本質(zhì)就是刪除最后一個(gè)/后面的內(nèi)容, 包括/也會(huì)被刪除
    NSString *newStr = [str stringByDeletingLastPathComponent];
    NSLog(@"%@", newStr);
(4)給文件路徑添加一個(gè)目錄
     // 本質(zhì)就是在字符串的末尾加上一個(gè)/ 和指定的內(nèi)容
     // 注意: 如果路徑后面已經(jīng)有了/, 那么就不會(huì)添加了
     //      如果路徑后面有多個(gè)/, 那么會(huì)自動(dòng)刪除多余的/, 只保留一個(gè)
     NSString *newStr = [str stringByAppendingPathComponent:@"xmg"];
     NSLog(@"%@", newStr);
(5)獲取路徑中文件的擴(kuò)展名
    // 本質(zhì)就是從字符串的末尾開始查找., 截取第一個(gè).后面的內(nèi)容
    NSString *newStr = [str pathExtension];
    NSLog(@"%@", newStr);
(6)刪除路徑中文件的擴(kuò)展名
   // 本質(zhì)就是從字符串的末尾開始查找.,刪除第一個(gè).和.后面的內(nèi)容
    NSString *newStr = [str stringByDeletingPathExtension];
    NSLog(@"%@", newStr);
(7)給文件路徑添加一個(gè)擴(kuò)展名
    // 本質(zhì)就是在字符串的末尾加上一個(gè).和指定的內(nèi)容
    NSString *newStr = [str stringByAppendingPathExtension:@"jpg"];
    NSLog(@"%@", newStr);

8.字符串的轉(zhuǎn)換

(1)將字符串轉(zhuǎn)換為大寫
NSString *newStr = [str uppercaseString];
NSLog(@"%@", newStr);
(2)將字符串轉(zhuǎn)換為小寫
 NSString *newStr2 = [newStr lowercaseString];
 NSLog(@"%@", newStr2);
(3)將字符串的首字符轉(zhuǎn)換為大寫
 NSString *newStr2 = [newStr capitalizedString];
 NSLog(@"%@", newStr2);
(4)字符串與基本數(shù)據(jù)類型的轉(zhuǎn)換
    NSString *str1 = @"110";
    NSString *str2 = @"120";
//    str1 + str2; // 錯(cuò)誤
    int value1 = [str1 intValue];
    int value2 = [str2 intValue];
    NSLog(@"sum = %i", value1 + value2);
    
    // 注意: 如果不是int,double,float,bool,integer,longlong這些類型就不要亂用
    NSString *str3 = @"abc";
    int value3 = [str3 intValue];
    NSLog(@"value3 = %i", value3);
(5)C語言字符串和OC字符串之間的轉(zhuǎn)換
    char *cStr = "lnj";
    NSString *str = [NSString stringWithUTF8String:cStr];
    NSLog(@"str = %@", str);
    
    NSString *newStr = @"lmj";
    const char *cStr2 = [newStr UTF8String];
    NSLog(@"cStr2 = %s", cStr2);

9.分割字符串

NSArray *array = [str componentsSeparatedByString:@"+"];
str = array[2];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 從今天開始,我將總結(jié)一些常用的基礎(chǔ)知識。 NSString 是開發(fā)中最長用到的一個(gè)類。廢話不多說,直接把方法調(diào)用出...
    KiMan閱讀 566評論 0 0
  • 《ilua》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 1...
    葉染柒丶閱讀 11,461評論 0 11
  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 28,703評論 5 20
  • 【21天堅(jiān)持讀書計(jì)劃 第二期】 D1(10–19) NO.7《姥姥語錄》(P270–321) 收獲: 1、倪萍老師...
    扶蘇與荷華閱讀 604評論 0 0

友情鏈接更多精彩內(nèi)容