iOS開發(fā)之基礎篇(2)—— NSString千扶、NSMutableString

版本

Xcode 8.2.1

一词爬、NSString

在第一個工程HelloWorld中秃嗜,使用
NSLog(@"Hello World!");
打印出了"Hello World!"這個字符串(顯示在控制臺里)锅锨。下面看看NSString字符串更多的操作叽赊。

    //最簡單的方式創(chuàng)建一個字符串
    //NSString 又可以稱之為不可變字符串
    NSString *s1tr = @"大家好";
    constchar *s2 ="Hello";
    
    //通過C類型的字符串來創(chuàng)建一個OC的字符串
    //encoding表示編碼格式 UTF-8的編碼格式
    //亂碼:編碼時和解碼時用的編碼格式不同所造成的
    NSString *s1tr1 = [[NSString alloc] initWithCString:s2 encoding:NSUTF8StringEncoding];
    NSLog(@"str1 = %@",s1tr1);
    
    //OC的字符串轉換為C語言的字符串
    constchar *s1 = [s1tr1 UTF8String];
    NSLog(@"s1 = %s",s1);
    
    //通過一個已經存在的OC字符串實例化一個內容相同的OC字符串
    NSString *s2tr2 = [[NSString alloc] initWithString:s1tr];
    NSString *s3tr3 = [NSString stringWithString:s1tr];
    NSLog(@"str2 = %@ str3 = %@",s2tr2,s3tr3);
    
    //格式化創(chuàng)建一個OC字符串
    NSInteger i = 100;
    CGFloat f1 = 9.8;
    //需求:快速的把i和f合并并且轉換成字符串輸出《重點》
    NSString *str4 = [[NSString alloc] initWithFormat:@"這個整形的值為%ld這個浮點型的值為%.1f",i,f1];
    NSLog(@"%@",str4);
    
    //%@表示輸出的是OC的對象
    NSString *str5 = [NSString stringWithFormat:@"%ld%.1f%@",i,f,str];
    NSLog(@"str5 = %@",str5);
    
    NSString *str11 = @"11";
    NSString *str12 = [NSString stringWithFormat:@"%d%d",1,1];
    NSLog(@"str = %@ str1 = %@",str11,str12);
    
    //比較兩個字符串是否相等(內容),YES代表相等,NO代表不相等
    //==比較的是地址是否相等
    if ([str12 isEqualToString:str11]) {
        
        NSLog(@"字符串內容相等");
    }
    
    //獲取字符串長度
    NSUInteger length = [str length];
    NSLog(@"%lu",length);
    
    NSString *s22tr2 = @"bbcd";
    NSString *s33tr3 = @"abce";
    
   /*typedef NS_ENUM(NSInteger, NSComparisonResult)
     {
        NSOrderedAscending = -1L,
        NSOrderedSame ,
        NSOrderedDescending
     };*/
    
    //比較字符串的大小
    if ([s22tr2 compare:s33tr3] == NSOrderedSame) {
        
        NSLog(@"相等");
    }elseif ([s22tr2 compare:s33tr3] == NSOrderedAscending){
        
        NSLog(@"str3 大于 str2");
    }else{
        
        NSLog(@"str3 小于 str2");
    }
    
    //獲取一個字符串中的字符串(提取字符串)
    NSString *s4tr4 = @"我們都是好孩子";
    
    //提取一個字符(Unicode 0-65535)
    unichar cNum = [s4tr4 characterAtIndex:4];
    NSLog(@"%C",cNum);
    
    //提取一段字符,指定起始位置,直到提取到末尾
    NSString *resultStr1 = [s4tr4 substringFromIndex:4];
    NSLog(@"resultStr1 = %@",resultStr1);
    
    //從頭開始提取,指定結束位置
    NSString *resultStr2 = [s4tr4 substringToIndex:2];
    NSLog(@"resultStr2 = %@",resultStr2);
    
    //提取指定區(qū)間內的子字符串
    /*typedef struct _NSRange {
        
        NSUInteger location;//起始位置
        NSUInteger length;//提取的長度
     
     } NSRange;*/
    
    //NSMakeRange函數(shù)可以返回一個NSRange的結構體
    //NSRange range = {1,3};
    NSString *resultStr3 = [s4tr4 substringWithRange:NSMakeRange(1,3)];
    NSLog(@"resultStr3 = %@",resultStr3);
    
    //查找字符串
    NSRange resultRange = [s4tr4 rangeOfString:@"好孩子1"];
    if (resultRange.location == NSNotFound) {
        
        NSLog(@"沒有找到指定的字符串");
    }
    
    //NSLog(@"子字符串的起始位置為%lu ,長度為%lu",resultRange.location,resultRange.length);
    
    NSString *s5tr5 =@"abCDFg";
    //字符串全部轉換成大寫
    NSLog(@"%@",[s5tr5 uppercaseString]);
    //字符串全部轉換成小寫
    NSLog(@"%@",[s5tr5 lowercaseString]);
    
    //追加(僅限于字符串)
    NSString *resultStr4 = [s5tr5 stringByAppendingString:@"efkopd"];
    NSLog(@"resultStr4 = %@",resultStr4);
    
    //格式化追加
    NSString *resultStr5 = [s5tr5 stringByAppendingFormat:@"%d%.1f",19,9.99];
    NSLog(@"resultStr5 = %@",resultStr5);
    
    //字符串轉化成整型
    NSString *str22 = @"222";
    NSInteger num11 = [str22 integerValue];
    NSLog(@"num = %ld",num11);

示例:

清空main方法中的代碼段必搞,根據(jù)如上的知識點必指,貼入如下代碼:

int main(int argc, char * argv[]) {
    
    //分別以OC和C方法創(chuàng)建一個不可變字符串
    NSString *str1 = @"Work harder";
    const char *s1 = "快樂生活";
    
    //C字符串轉化為OC字符串
    NSString *str2 = [[NSString alloc] initWithCString:s1 encoding:NSUTF8StringEncoding];
    NSLog(@"str2 = %@",str2);
    
    //OC字符串轉化為C字符串
    //中文不能轉換?
    const char *s2 = [str1 UTF8String];
    NSLog(@"s2 = %s",s2);
    
    //用已有的OC字符串實例化內容相同的字符串
    NSString *str3 = [[NSString alloc] initWithString:str1];
    NSString *s3 = [NSString stringWithString:str2];
    NSLog(@"str3 = %@ s3 = %@",str3,s3);
    
    //合并數(shù)值且轉換成字符串
    NSInteger a = 10;
    CGFloat b =3.3;
    NSString *c = [[NSString alloc] initWithFormat:@"整型值為%ld顾画,浮點值為%.1f",a,b];
    NSLog(@"%@",c);
    
    //比較兩個字符串是否相等(比較的是地址)
    if ([str1 isEqualToString:str2]) {
        NSLog(@"str1等于str2");
    }else {
        NSLog(@"str1不等于str2");
    }
    
    //獲取字符串長度
    NSUInteger length = [str2 length];
    NSLog(@"%lu",length);
    
    //提取字符串:單個取劫,指定位到末尾,開頭至指定位置研侣,指定區(qū)間
    unichar cNum = [str1 characterAtIndex:5];
    NSString *str4 = [str1 substringFromIndex:5];
    NSString *str5 = [str1 substringToIndex:5];
    NSString *str6 = [str1 substringWithRange:NSMakeRange(2, 4)];
    NSLog(@"cNum=%c,str4=%@,str5=%@,str6=%@",cNum,str4,str5,str6);
    
    //字符串全部轉換成大寫
    NSLog(@"%@",[str1 uppercaseString]);
    
    //追加字符串
    NSString *str1Plus = [str1 stringByAppendingString:@",live up"];
    NSLog(@"%@",str1Plus);
    
    //字符串轉化成整型
    NSString *str7 = @"33";
    NSInteger num = [str7 integerValue];
    NSLog(@"num=%ld",num);
}

輸出結果:

二谱邪、NSMutableString

上面的NSString為不可變字符串。但現(xiàn)實中庶诡,我們又需要可以進行改動的字符串(可變字符串)惦银,有請NSMutableString登場。

    //NSMutableString:可變字符串
    //NSMutableString是繼承自NSString
    //NSMutableString可以使用NSSting中所有的函數(shù),但是NSSting不能使用NSMutableString中的特色函數(shù)
    
    //改變了指針的指向
    NSString *str_1 = @"haha";
    NSLog(@"str1 = %p",str_1);
    str_1 = @"呵呵";
    NSLog(@"str1 = %p",str_1);
    
    
    //空白的字符串
    NSMutableString *_str = [[NSMutableString alloc] init];
    //[NSMutableString string];
    NSLog(@"str = %p str = %@",_str,_str);
    
    //設置可變字符串的內容
    [_str setString:@"我們都是好孩子"];
    NSLog(@"str = %p str = %@",_str,_str);
    
    //插入
    [_str insertString:@"非常" atIndex:4];
    NSLog(@"str = %p str = %@",_str,_str);
    
    //追加
    [_str appendString:@"末誓,而且很乖"];
    //格式化追加
    //[str appendFormat:<#(NSString *), ...#>];
    NSLog(@"str = %p str = %@",_str,_str);
    
    //刪除
    [_str deleteCharactersInRange:NSMakeRange(0,2)];
    NSLog(@"str = %p str = %@",str,str);
    
    //替換
    //把一個區(qū)間內的字符串都替換成提供的字符串
    [_str replaceCharactersInRange:NSMakeRange(0,7) withString:@"你們很美"];
    NSLog(@"str = %p str = %@",_str,_str);
    
    //查找替換
    NSMutableString *_str2 = [NSMutableString string];
    
    [_str2 setString:@"吃葡萄不吐葡萄皮"];
    
    /*
     參數(shù)1:要替換的字符串
     參數(shù)2:替換的字符串
     參數(shù)3:替換規(guī)則NSLiteralSearch
     參數(shù)4:查找的區(qū)間
     作用:在區(qū)間里面查找要替換的字符串扯俱,只要發(fā)現(xiàn)符合要求的字符串,就全部替換掉
     */
    [_str2 replaceOccurrencesOfString:@"葡萄" withString:@"西瓜" options:NSLiteralSearch range:[_str2 rangeOfString:_str2]];//{0,8}
    //[str2 rangeOfString:str2]返回的是str2本身的區(qū)間
    NSLog(@"str2 = %@",_str2);

示例

int main(int argc, char * argv[]) {
    
    //改變指針的指向
    NSString *str1 = @"haha";
    NSLog(@"str1 = %p str1 = %@",str1,str1);
    str1 = @"哈哈";
    NSLog(@"str1 = %p str1 = %@",str1,str1);
    
    //空白的字符串
    NSMutableString *str = [[NSMutableString alloc] init];
    //[NSMutableString string];
    NSLog(@"str = %p str = %@",str,str);
    
    //設置可變字符串的內容
    [str setString:@"我們都是好孩子"];
    NSLog(@"str = %p str = %@",str,str);
    
    //插入
    [str insertString:@"非常" atIndex:4];
    NSLog(@"str = %p str = %@",str,str);
    
    //追加
    [str appendString:@"喇澡,而且很乖"];
    //格式化追加
    //[str appendFormat:(NSString *), ...];
    NSLog(@"str = %p str = %@",str,str);
    
    //刪除
    [str deleteCharactersInRange:NSMakeRange(0, 2)];
    NSLog(@"str = %p str = %@",str,str);
    
    //替換
    //把一個區(qū)間內的字符串都替換成提供的字符串
    [str replaceCharactersInRange:NSMakeRange(0, 7) withString:@"你們很美"];
    NSLog(@"str = %p str = %@",str,str);
    
    //查找替換
    NSMutableString *str2 = [NSMutableString string];
    
    [str2 setString:@"吃葡萄不吐葡萄皮"];
    NSLog(@"str2 = %p str2 = %@",str2,str2);
    
    /*
     參數(shù)1:要替換的字符串
     參數(shù)2:替換的字符串
     參數(shù)3:替換規(guī)則NSLiteralSearch
     參數(shù)4:查找的區(qū)間
     作用:在區(qū)間里面查找要替換的字符串迅栅,只要發(fā)現(xiàn)符合要求的字符串,就全部替換掉
     */
    [str2 replaceOccurrencesOfString:@"葡萄" withString:@"西瓜" options:NSLiteralSearch range:[str2 rangeOfString:str2]];//{0,8}
    //[str2 rangeOfString:str2]返回的是str2本身的區(qū)間
    NSLog(@"str2 = %p str2 = %@",str2,str2);
    
}

輸出結果:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末晴玖,一起剝皮案震驚了整個濱河市读存,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呕屎,老刑警劉巖让簿,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秀睛,居然都是意外死亡尔当,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門蹂安,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椭迎,“玉大人,你說我怎么就攤上這事田盈∠辣蹋” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵缠黍,是天一觀的道長。 經常有香客問我药蜻,道長瓷式,這世上最難降的妖魔是什么替饿? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮贸典,結果婚禮上视卢,老公的妹妹穿的比我還像新娘。我一直安慰自己廊驼,他們只是感情好据过,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妒挎,像睡著了一般绳锅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酝掩,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天鳞芙,我揣著相機與錄音,去河邊找鬼期虾。 笑死原朝,一個胖子當著我的面吹牛,可吹牛的內容都是我干的镶苞。 我是一名探鬼主播喳坠,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茂蚓!你這毒婦竟也來了壕鹉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤煌贴,失蹤者是張志新(化名)和其女友劉穎御板,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牛郑,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡怠肋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淹朋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笙各。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖础芍,靈堂內的尸體忽然破棺而出杈抢,到底是詐尸還是另有隱情,我是刑警寧澤仑性,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布惶楼,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏歼捐。R本人自食惡果不足惜何陆,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豹储。 院中可真熱鬧贷盲,春花似錦、人聲如沸剥扣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钠怯。三九已至佳魔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呻疹,已是汗流浹背吃引。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刽锤,地道東北人镊尺。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像并思,于是被迫代替她去往敵國和親庐氮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容