objective C中的字符串操作解析

在OC中創建字符串時,一般不使用C的方法,因爲C將字符串作爲字符數組,所以在操作時會有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的操作字符串,下面舉幾個例子:


1、創建:

直接利用等號賦值

NSString * str1=@"我是字符串";

stringWithFormat方法

NSString *str2=[NSString stringWithFormat:@"我是參數字符串%d,%d",11,111"];

2,合併:

NSString 字符串是不可改變的,可以在原字符串的基礎上生成新的字符串,但是原字符串並沒有改變,但是NSString 提供了一個子類:NSMutableString.該類是可變的,NSString可用的方法也同樣適用於NSMutableString,但是使用之前要預先聲明:

NSMutableString *str3 = [NSMutableString stringWithCapacity:50];

 需要注意的是,該處聲明時雖然給了50的容量,但是NSMutableString會自動擴充,所以不用擔心給的空間小了。

創建了NSMutableString字符串,我們就可以進行合併操作了,常用方法有:

[plain] view plaincopy
  1. NSMutableString *str3 =[NSMutableString stringWithCapacity:50];  
  2.      NSString *str4=@"NSString 字符串";  
  3.      [str3 appendString:str4];  
  4.      [str3 appendFormat:@"%d",5];  
  5.      NSLog(str3);  
以上代碼輸出結果爲:“NSString字符串5”;

3,刪減:

字符串的刪減需要用到一個輔助結構體:NSRange;

NSRange的兩個屬性length,location,既可用於圖形輔助,又可用於字符串輔助,在字符串輔助中,表示字符串中的一段範圍,location指起始位置,length指包含字符的個數。創建NSRange的方法有三種:

(一)

NSRange range;

range.location = 10;

range.length = 2;

(二)

NSRange range={10,2};

(三)

NSRange range=NSMakeRange(10,2);//此種方法較爲常用。

下面看段代碼,如何使用NSRange輔助修改字符串內容:


[plain] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. int main(int argc, const char * argv[])  
  4. {  
  5.   
  6.     @autoreleasepool {  
  7.           
  8.       NSMutableString *str=[NSMutableString stringWithCapacity:5];  
  9.         [str appendString:@"I am holydancer"];  
  10.         //判斷str裏是否有"am",並將其範圍取出。  
  11.         NSRange range =[str rangeOfString:@"am"];  
  12.         [str deleteCharactersInRange:range];  
  13.         NSLog(@"%@,%lu,%lu",str,range.length,range.location);  
  14.          
  15.           
  16.           
  17.     }  
  18.     return 0;  
  19. }  
輸出結果如下:

I  holydancer,2,2


4,比較:

(一)是否相等的比較:

和java中某些情況類似,字符串並不能直接用==比較,==比較的是兩個字符串是否是同一個對象,而我們要比較的通常是兩個字符串是否相等,這時應該使用isEqualToString,而不是用==比較其指針值。isEqualToString的返回值是BOOL類型,爲YES和NO。

[plain] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. int main(int argc, const char * argv[])  
  4. {  
  5.   
  6.     @autoreleasepool {  
  7.           
  8.         NSString *str1 = @"holydancer";  
  9.         NSString *str2 = @"holydancer";  
  10.         if([str1 isEqualToString:str2])  
  11.         {  
  12.             NSLog(@"字符串內容相等");  
  13.         }  
  14.      
  15.           
  16.     }  
  17.     return 0;  
  18. }  
(二)字符串大小的比較:

字符串根據排列順序的不同,會有大小的差異,如果我們要比較兩個字符串的大小的話,可以使用compare方法。compare 方法返回的結果有三種:NSOrderedAscending,NSOrderedSame,NSOrderedDescending,另外,在使用compare方法時可以添加參數來決定是否區分大小寫,或者聲明爲比較字符串個數而不是字符值等比較條件。

具體使用看如下DEMO:

[plain] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. int main(int argc, const char * argv[])  
  4. {  
  5.   
  6.     @autoreleasepool {  
  7.           
  8.         NSString *str1 = @"holydancer";  
  9.         NSString *str2 = @"dancerholy";  
  10.         NSComparisonResult result1 =[str1 compare:str2];  
  11.         if (result1==NSOrderedSame) {  
  12.             NSLog(@"相等");  
  13.         }else if (result1 == NSOrderedAscending) {  
  14.             NSLog(@"str1小於str2");  
  15.         }else {  
  16.             NSLog(@"str1大於str2");  
  17.         }  
  18.           
  19.     }  
  20.     return 0;  
  21. }  

如果要忽略大小寫的話,可以在options 裏面加一個參數NSCaseInsensitiveSearch;具體如下

NSComparisonResult result2 =[str1 compare:str2 options:NSCaseInsensitiveSearch];

和NSCaseInsensitiveSearch對應的條件還有NSLiteralSearch(區分大小寫),NSNumericSearch(按字符個數比較),並可以使用"|"來同時滿足多個條件。

(三)判斷字符串的開頭和結尾

hasPrefix方法判斷是否以某字符串開頭,hasSuffix判斷是否以某字符串結尾。

[plain] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. int main(int argc, const char * argv[])  
  4. {  
  5.   
  6.     @autoreleasepool {  
  7.           
  8.         NSString *str1 = @"holydancer";  
  9.         if ([str1 hasPrefix:@"holy"]) {  
  10.             NSLog(@"str1以holy開頭");  
  11.         }  
  12.         if ([str1 hasSuffix:@"dancer"]) {  
  13.             NSLog(@"str1以dancer結尾");  
  14.         }  
  15.           
  16.           
  17.     }  
  18.     return 0;  
  19. }  

關鍵字:objective-c ,objective c , oc ,字符串


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章