NSString用法、Obj-C數組以及字串拼接與分割

來源:互聯網
上載者:User
一、介紹
使用NSString建立一個字串的代碼如下:


#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
    NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];


    NSString *str=@"Programming is fun";
    NSLog(@"%@",str);


    [pool drain];
    return 0;
}
Objective-C的字串是由char組成,NSString的字串是由unichar組成,unichar的位元組數是可變的。
預設建立的字串是NSConstantString類的常量字串。


二、常用的方法
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
    NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];


    //字串聲明、賦值、轉換
    NSString *str1=@"This is string A";
    NSString *str2=@"This is string B";
    NSString *res;
    res=[NSString stringWithString:str1];
    NSLog(@"with:%@",res);
    res=[str1 stringByAppendingString:str2];
    NSLog(@"appending:%@",res);
    NSLog(@"Lowercase of str2:%@",[str2 lowercaseString]);
    NSLog(@"Uppercase of str2:%@",[str2 uppercaseString]);


    //字串截取
    NSLog(@"Length of str1 is:%lu",[str1 length]);
    NSLog(@"First 3 chars of str1:%@",[str1 substringToIndex:3]);
    NSLog(@"Chars from index 5 of str1:%@",[str1 substringFromIndex:5]);
    NSLog(@"Chars from index 8 through 13:%@",[[str1 substringFromIndex:8]substringToIndex:6]);
    NSLog(@"Chars from index 8 through 13:%@",[str1 substringWithRange:NSMakeRange(8,6)]);


    //字串比較
    if ([str1 isEqualToString:str2]) {
        NSLog(@"str1==str2");
    } else {
        NSLog(@"str1!=str2");
    }
    NSComparisonResult compareResult;
    compareResult=[str1 compare:str2];
    if (compareResult==NSOrderedAscending) {
        NSLog(@"str1<str2");
    } else if(compareResult==NSOrderedSame) {
        NSLog(@"str1=str2");
    } else {
        NSLog(@"str1>str2");
    }


    //字串尋找
    NSRange subRange;
    subRange=[str1 rangeOfString:@"string A"];
    NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);
    subRange=[str1 rangeOfString:@"string B"];
    if (subRange.location==NSNotFound) {
        NSLog(@"String not found");
    } else {
        NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);
    }


    [pool drain];
    return 0;
}

stringWithString通過從給定的字串對象中複製字串,來建立並返回一個字串對象。文法是"+ (id)stringWithString:(NSString *)aString"。


stringByAppendingString在接受字串追加給定的字串,並返回追加後的新字串。文法是:"- (NSString *)stringByAppendingString:(NSString *)aString"。


lowercaseString返回字串的小寫,文法是"- (NSString *)lowercaseString"。


uppercaseString返回字串的大寫,文法是"- (NSString *)uppercaseString"。


length返回Unicode字元數。文法是"- (NSUInteger)length",NSUInteger表示一個無符號的整形數。


substringToIndex返回一個字元,它從首字元(首字元的索引是0)直到指定的索引字元(不包括指定的索引字元),並返回截取出來的新字串。文法是"- (NSString *)substringToIndex:(NSUInteger)anIndex"。


substringFromIndex返回一個子字串,它從指定的索引的字元開始(包括指定的索引字元),直到字串的結尾。文法是"- (NSString *)substringFromIndex:(NSUInteger)anIndex"。


substringWithRange返回指定範圍的子字串。文法是"- (NSString *)substringWithRange:(NSRange)aRange"。 索引範圍依靠NSRange對象來指定。


isEqualToString判斷兩字串是否相等,並返回一個布爾值,文法是"- (BOOL)isEqualToString:(NSString *)aString"。


compare返回一個比較結果的對象,文法是:"- (NSComparisonResult)compare:(NSString *)aString"。NSComparisonResult有三種情況,表示給定的數字是否大於(NSOrderedAscending),等於(NSOrderedSame)或小於(NSOrderedDescending)接收器的值。compare方法區分大小寫,而caseInsensitiveCompare方法不區分大小寫。


rangeOfString在接受字串中尋找指定字串,如果有則返回第一次出現的範圍。這個範圍是用一個結構變數來表示的,結構成員location的值表示起始的索引,結構成員length表示子字串的長度。如果沒有則返回範圍的location值為NSNotFound。



Obj-C只是增加了一點“特殊語料”的C語言,所以可以用printf()代替NSLog()。但我們建議使用NSLog,因為它添加了特性,例如時間戳記,日期戳和自動附加分行符號(‘\n’)等。

1.OC的數群組成員是任意的對象指標    與C中的鏈表結構類似(以nil結尾)    一切的數組操作不能越界
OC的數組分為不可變數組 NSArray    可變數組 NSMutableArray



NSArray

NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil]; 
//通過下標擷取數群組成員(下標從0開始) 
NSLog(@"%@",[array objectAtIndex:0]);


//擷取數組有效成員個數 (不包括nil) 
NSLog(@"%ld",[array count]);
    
for (i = 0; i < [array count]; i++) {
    //遍曆數組(C方法) 
    NSLog(@"%@",[array objectAtIndex:i]); 
}


//(OC)查看數組內容(先給array發送description訊息,然後給每個成員都發送一個description訊息)
NSLog(@"%@",array);


//建立數組對象 相當於拷貝 
NSArray * array1 = [[NSArray alloc]initWithArray:array];


//建立數組對象 相當於拷貝 
NSArray * arry2 = [NSArray arrayWithArray:array];


//正序列舉程式 
//建立一個列舉程式 把數組的每個元素的地址一次賦給列舉程式,然後建立起某種關聯 (列舉程式只能用來讀數群組成員) 
//枚舉時 會和數組建立某種關聯(修改監視器/迭代器) 限制枚舉的同時不能修改元素 只能讀不能寫 
NSEnumerator * enumer = [array objectEnumerator];


id obj; 
//第一次迴圈把數組的第一個元素賦給obj  第二次迴圈把第二個數組元素賦給obj 
while (obj = [enumer nextObject]) {             
    //遍曆數組 
    NSLog(@"%@",obj);     
}
 
//快速枚舉  第一次迴圈把array的第一個元素賦給ob  第二次迴圈把array的第二個元素賦給ob 直到nil(只能讀不能改) 
for(id ob in array){ 
    NSLog(@"%@",ob);       
}


 
//逆序輸出數組(建立逆序列舉程式  第一次迴圈把最後一個元素賦給obj ) 
NSEnumerator * enumer1 = [array reverseObjectEnumerator]; 
while (obj = [enumer1 nextObject]) { 
     NSLog(@"%@",obj); 

    
if ([obj isKindOfClass:[Dog class]]) 
//擷取類的類型 判是否是指定類的對象 
    if ([obj isMemberOfClass:[Dog class]]) { 



2.不可變數組

----------------------------字串尋找----------------------------
NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"one", nil];    
NSUInteger index = [array indexOfObject:@"one123"];
//返回第一個找到的數群組成員對應的下標 找不到返回NSNotFound    
index = [array indexOfObject:@"one" inRange:NSMakeRange(1, 3)];
//在指定範圍內尋找 
if (index != NSNotFound) { 
    NSLog(@"%ld",index); 



----------------------------抽取 組成新的數組----------------------------
NSArray * array1 = [array objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]]; 
《數字集合》 
NSIndexSet這是個數字集合類 
[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]產生一個數字集合


3.可變數

NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
//在數組尾部插入元素  
[array addObject:@"five"];


//在數組指定下標位置插入元素(不能越界,最大值為length)    
[array insertObject:@"six" atIndex:5];


//刪除指定元素(數組中出現的所有位置都將被刪除) 
[array removeObject:@"six"];


//從指定下標位置開始的指定長度內刪除指定元素 
[array removeObject:@"two" inRange:NSMakeRange(0, 3)];


//刪除最後一個元素 
[array removeLastObject];


//刪除所有元素     
[array removeAllObjects];


//將指定下標位置元素替換為指定的元素 
[array replaceObjectAtIndex:3 withObject:@"ios"];


//將指定下標的兩個元素進行交換
[array exchangeObjectAtIndex:0 withObjectAtIndex:3];


4.字串分割與拼接


//@""   空的字串對象
 
---------------------字串分割執行個體---------------------
NSString * ptr = @"I am a man"; 


//將字串整體作為分割條件 傳回值為NSArray不可變數組 
NSArray * array = [ptr componentsSeparatedByString:@" "];


//若修改,則將NSArray轉化為NSMutableArray 
NSMutableArray * array1 = [NSMutableArray arrayWithArray:array];


//以字串中的字元作為分割條件進行分割
NSArray * array2 = [ptr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];
 
《字元集合》 
NSCharacterSet 這是個字元集合類 


//把字串轉化為字元集合
[NSCharacterSet characterSetWithCharactersInString:@", "] 


---------------------字串拼接執行個體---------------------
NSString * str = [array componentsJoinedByString:@" "];   
若分割條件出現在開頭或者結尾,則會出現空串@"",如果不需要,則需要轉化成NSMutableString對空串進行處理 
func1:  [array1 removeObject:@""];     
//找到空串直接刪除 
func2:  for(id obj in array1){
    if([obj length] == 0)           
    //空串的長度為0 
    if([obj isEqualToString:@""])   
    //與空串進行比較(字串是不能進行==比較的,要使用函數)        

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.