文章出處

objective C中的字符串操作

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

 

一、創建:

直接利用等號賦值

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

stringWithFormat方法

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

 

二,合并:

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”;

 

三、刪減:

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

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

1、

NSRange range;

range.location = 10;

range.length = 2;

2、

NSRange range={10,2};

3、

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

 

四、比較:

1、是否相等的比較:

和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. }  

2、字符串大小的比較:

 

字符串根據排列順序的不同,會有大小的差異,如果我們要比較兩個字符串的大小的話,可以使用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(按字符個數比較),并可以使用"|"來同時滿足多個條件。

 

3、判斷字符串的開頭和結尾

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. }  

 

holydancer原創,如需轉載,請在顯要位置注明:

 

轉自holydancer的CSDN專欄,原文地址:http://blog.csdn.net/holydancer/article/details/7343561

 

 

 

以下為http://www.cnblogs.com/langtianya/原創,轉載請注明

五、判斷字符串為空并且沒有值(長度為0)

  NSString *urlString ="";

   if (!urlString&&[urlString length] == 0)

    {

      NSLog(@”字符串為空或者長度為0”);

    }

 }

 六、字符串是否包含某字符串

如果想知道字符串內的某處是否包含其他的字符串,使用rangeOfString:
-(NSRange) rangeOfString:(NSString *) astring;


將rangeOfString:發送給一個NSString對象時,傳遞的參數時要查找的字符串。它會返回一個NSRange struct來告訴你一個與這個字符串相匹配的部分從哪里開始以及匹配上的字符個數。
NSRange range;
range=[filename rangeOfString:@"o,world"];

 也可以用一下方法,等同java的contains方法

/* containsString: returns YES if the target string is contained within the receiver. Same as calling rangeOfString:options: with no options, thus doing a case-sensitive, non-literal search. localizedCaseInsensitiveContainsString: is the case-insensitive variant. Note that it takes the current locale into effect as well.  Locale-independent case-insensitive operation, and other needs can be achieved by calling rangeOfString:options:range:locale: directly.

 */

- (BOOL)containsString:(NSString *)aString NS_AVAILABLE(10_10, 8_0);

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

 

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()