標籤:
字串算是OC中非常重要和常用的一部分內容,OC中的字串與我之前在學習C,C++,Java中的字串有一定的不同,它非常類似於C++中容器的概念,但用法卻與之還是有很大的不同,也許是因為OC的文法就與其他我們常用的程式設計語言不盡相同。 這裡總結一下字串NSString與NSMutableString。
一. NSString
NSString代表字元序列不可變的字串,NSString的功能非常強大,OC的字串處理比C語言的餓字串簡單、易用得多。
這裡我們通過一個具體的例子來進行分析。
建立兩個字串對象:
NSString *str1 = @"this is string A";NSString *str2 = @"this is string B";
計算字串中的字元個數:
NSLog(@"Length of str1 : %lu" , [str1 length]);
利用stringWithString 將一個字串複製到另一個字串:
res = [NSString stringWithString : str1];
res = [str1 copy];
NSLog(@"copy : %@" , res);
stringByAppendingString,將一個字串複製到另一個字串的末尾:
str2 = [str1 stringByAppendingString:str2];
isEqualToNumber : 方法比較兩個NSNumber對象的數值。程式會返回一個BOOL值,查看這兩個值是否相等。
isEqualToString,判斷兩個字串是否相等:
if([str1 isEqualToString: res] == YES) NSLog(@"str1 == res");else NSLog(@"str1 != res");
compare : 方法測試一個值是否在數值上小於、等於或大於另一個值。
如: [intNumber compare : myNumber]
若intNumber 小於 myNumber ,返回NSOrderedAscending ;
相等 ,返回NSOrderdSame;
大於 ,返回NSOrderdDescending
//驗證一個字串是否小於、等於或大於另一個字串 compareResult = [str1 compare: str2]; if(compareResult == NSOrderedAscending) NSLog(@"str1 < str2"); else if(compareResult == NSOrderedSame) NSLog(@"str1 == str2"); else NSLog(@"str1 > str2");
uppercaseString,將字串轉換為大寫。
lowercaseString,將字串轉換為小寫。
//將字串轉換為大寫 res = [str1 uppercaseString]; //將字串轉換為小寫 res = [str1 lowercaseString];
stringByAppendingString,在字串後面添加固定的字串:
str = [str stringByAppendingString:@", iOS!"];
substringToIndex,擷取str的前10個字元組成的字串:
substringToIndex:方法建立了一個子字串,包括首字元都指定的索引數,但不包括這個字元。因為索引數是從0開始的,所以參數3表示從字串中提取0、1、2,並返回結果字串對象。對於所有採用索引數作為參數的字串方法,如果提供的索引數對該字串無效,就會獲得Range or index out of bounds的出錯資訊。
//擷取str的前10個字元組成的字串 NSString *s1 = [str substringToIndex:10]; NSLog(@"%@" , s1);
substringFromIndex,擷取str從第5個字元開始,與後面字元組成的字串:
//擷取str從第5個字元開始,與後面字元組成的字串 NSString *s2 = [str substringFromIndex:5]; NSLog(@"%@" , s2);
擷取str從第5個字元開始,到第15個字元組成的字串:
//擷取str從第5個字元開始,到第15個字元組成的字串 NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)]; NSLog(@"%@" , s3);
rangeOfString , 擷取ios在str中出現的位置:
//擷取iOS在str中出現的位置 NSRange pos = [str rangeOfString:@"iOS"]; NSLog(@"ios在str中出現的開始位置:%ld , 長度為:%ld" , pos.location , pos.length);
二. NSMutableString
NSMutableString對象代表一個字元序列可變的字串,而且NSMutableString是NSString的子類,因此前面介紹的NSString所包含的方法,NSMutableString都可以直接使用,NSMutableString對象也可直接當成NSString對象使用。
stringWithString,用不可變字串建立可變字串:
//從不可變字串建立可變字串 mstr = [NSMutableString stringWithString:str1]; NSLog(@"%@" , mstr);
insertString,插入字元:
//插入字元 [mstr insertString:@"mutable" atIndex:7]; NSLog(@"%@" , mstr);
insertString: atIndex: ,插入末尾進行有效拼接:
//插入末尾進行有效拼接 [mstr insertString:@" and string B" atIndex:[mstr length]]; NSLog(@"%@" , mstr);
deleteCharactersInRange:NSMakeRange() , 根據範圍刪除子字串:
//根據範圍刪除子字串 [mstr deleteCharactersInRange: NSMakeRange(16, 13)]; NSLog(@"%@" , mstr);
尋找然後直接刪除:
//尋找然後將其刪除 substr = [mstr rangeOfString:@"string B and "]; if(substr.location != NSNotFound){ [mstr deleteCharactersInRange:substr]; NSLog(@"%@" , mstr); }
範例程式碼如下:
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 8 // insert code here... 9 //NSLog(@"Hello, World!");10 11 NSString *str1 = @"this is string A";12 NSString *search , *replace;13 NSMutableString *mstr;14 NSRange substr;15 16 //從不可變字串建立可變字串17 mstr = [NSMutableString stringWithString:str1];18 NSLog(@"%@" , mstr);19 20 //插入字元21 [mstr insertString:@"mutable" atIndex:7];22 NSLog(@"%@" , mstr);23 24 //插入末尾進行有效拼接25 [mstr insertString:@" and string B" atIndex:[mstr length]];26 NSLog(@"%@" , mstr);27 28 29 //直接使用appendString30 [mstr appendString:@" and string C"];31 NSLog(@"%@" , mstr);32 33 //根據範圍刪除子字串34 [mstr deleteCharactersInRange: NSMakeRange(16, 13)];35 NSLog(@"%@" , mstr);36 37 //尋找然後將其刪除38 substr = [mstr rangeOfString:@"string B and "];39 40 if(substr.location != NSNotFound){41 [mstr deleteCharactersInRange:substr];42 NSLog(@"%@" , mstr);43 }44 45 46 //直接設定為可變的字串47 [mstr setString:@"this is string A"];48 NSLog(@"%@" , mstr);49 50 //替換一些字元51 [mstr replaceCharactersInRange:NSMakeRange(8, 6) withString:@" a mutable string"];52 NSLog(@"%@" , mstr);53 54 //尋找和替換55 search = @"this is";56 replace = @"an example of";57 58 substr = [mstr rangeOfString:search];59 60 if(substr.location != NSNotFound){61 [mstr replaceCharactersInRange:substr withString:replace];62 NSLog(@"%@" , mstr);63 }64 65 //尋找和替換所有的匹配項66 search = @"a";67 replace = @"X";68 69 substr = [mstr rangeOfString:search];70 71 while (substr.location != NSNotFound) {72 [mstr replaceCharactersInRange:substr withString:replace];73 74 }75 76 NSLog(@"%@" , mstr);77 78 }79 return 0;80 }
Objective-C: 字串NSString與NSMutableString