Object C學習筆記7-字串NSString之一

賀臣發表於2014-02-13

  在Object C中存在兩個類用於操作字串,NSString和NSMutableString;NSString在賦值之後不能修改其內容和長度,而NSMutableString可以動態的修改字串內容和長度,其主要區別就和.NET 中的string與StringBuilder之間的區別。

  1. 定義NSString字串

    在Object C中NSString是一個物件型別,其有多種定義方式:

NSString *str1=@"令狐聰";
        
        NSString *str2=[NSString stringWithFormat:@"名稱: %@ 性別:%s 年齡: %d \n",str1,"",25];
        
        NSString *str3=[NSString stringWithFormat:@"我的姓名是 令狐聰"];
        
        NSString *str4=[NSString stringWithUTF8String:"我是任盈盈"];
        
        NSString *str5=[str4 stringByAppendingString:str3];
        
        NSString *str6=[str4 stringByAppendingFormat:@" %@",@"笑傲江湖abc"];
        
        NSLog(@"str1=%@",str1);
        NSLog(@"str2=%@",str2);
        NSLog(@"str3=%@",str3);
        NSLog(@"str4=%@",str4);
        NSLog(@"str5=%@",str5);
        NSLog(@"str6=%@",str6);
NSString字串的定義

    因為NSString是物件型別,所以在定義的時候要使用 NSString *name 方式,而值需要使用 @+value方式,如@"NSString中文";

    也可以使用stringWithFormat全域性方法,stringWithUTF8String,stringByAppendingString,stringByAppendingFormat等方法來定義,看到Format我們可以想到.NET中的Format()方法,用於格式化字串。以上幾個方法具體效果如下:

2014-02-13 20:53:13.247 ObjectC10[460:303] str1=令狐聰
2014-02-13 20:53:13.249 ObjectC10[460:303] str2=名稱: 令狐聰 性別: 年齡: 25 
2014-02-13 20:53:13.251 ObjectC10[460:303] str3=我的姓名是 令狐聰
2014-02-13 20:53:13.252 ObjectC10[460:303] str4=我是任盈盈
2014-02-13 20:53:13.252 ObjectC10[460:303] str5=我是任盈盈我的姓名是 令狐聰
2014-02-13 20:53:13.253 ObjectC10[460:303] str6=我是任盈盈 笑傲江湖abc

 

  2.遍歷字串中的字元

    使用- (NSUInteger)length; 方法可以獲得字串的長度,這裡要注意中文和英文的問題,在C中char表示一個位元組,而一箇中文字元佔用兩個位元組位。

可以獲得。

int count=[str6 length];
        NSLog(@"字串長度:%d",count);
        for(int i=0;i<count;i++){
            NSString *abc=[str6 substringWithRange:NSMakeRange(i,1)];
            NSLog(@"%@",abc);
        }
        
        for(int i=0;i<count;i++){
            unichar c=[str6 characterAtIndex:i];
            NSLog(@"中文情況=%c",c);
        }
        
        for(int i=0;i<count;i++){
            unichar c=[str6 characterAtIndex:i];
            NSLog(@"中文情況=%C",c);
        }
遍歷字串字元

    第一種方式NSString *abc=[str6 substringWithRange:NSMakeRange(i,1)];

    第二種方式unichar c=[str6 characterAtIndex:i];

    這種需要注意中文的問題,第二種方式出現中文%c輸出則為亂碼,必須使用%C才能正確的輸出中文。效果如下

2014-02-13 20:53:13.253 ObjectC10[460:303] 字串長度:13
2014-02-13 20:53:13.253 ObjectC10[460:303] 我
2014-02-13 20:53:13.254 ObjectC10[460:303] 是
2014-02-13 20:53:13.254 ObjectC10[460:303] 任
2014-02-13 20:53:13.255 ObjectC10[460:303] 盈
2014-02-13 20:53:13.255 ObjectC10[460:303] 盈
2014-02-13 20:53:13.255 ObjectC10[460:303]  
2014-02-13 20:53:13.256 ObjectC10[460:303] 笑
2014-02-13 20:53:13.256 ObjectC10[460:303] 傲
2014-02-13 20:53:13.257 ObjectC10[460:303] 江
2014-02-13 20:53:13.257 ObjectC10[460:303] 湖
2014-02-13 20:53:13.258 ObjectC10[460:303] a
2014-02-13 20:53:13.258 ObjectC10[460:303] b
2014-02-13 20:53:13.258 ObjectC10[460:303] c
2014-02-13 20:53:13.259 ObjectC10[460:303] 中文情況=
2014-02-13 20:53:13.259 ObjectC10[460:303] 中文情況=/
2014-02-13 20:53:13.260 ObjectC10[460:303] 中文情況=û
2014-02-13 20:53:13.260 ObjectC10[460:303] 中文情況=È
2014-02-13 20:53:13.261 ObjectC10[460:303] 中文情況=È
2014-02-13 20:53:13.261 ObjectC10[460:303] 中文情況= 
2014-02-13 20:53:13.261 ObjectC10[460:303] 中文情況=
2014-02-13 20:53:13.262 ObjectC10[460:303] 中文情況=²
2014-02-13 20:53:13.262 ObjectC10[460:303] 中文情況=_
2014-02-13 20:53:13.263 ObjectC10[460:303] 中文情況=V
2014-02-13 20:53:13.263 ObjectC10[460:303] 中文情況=a
2014-02-13 20:53:13.264 ObjectC10[460:303] 中文情況=b
2014-02-13 20:53:13.264 ObjectC10[460:303] 中文情況=c
2014-02-13 20:53:13.265 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.265 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.266 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.266 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.266 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.267 ObjectC10[460:303] 中文情況= 
2014-02-13 20:53:13.267 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.268 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.268 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.269 ObjectC10[460:303] 中文情況=2014-02-13 20:53:13.269 ObjectC10[460:303] 中文情況=a
2014-02-13 20:53:13.269 ObjectC10[460:303] 中文情況=b
2014-02-13 20:53:13.270 ObjectC10[460:303] 中文情況=c
遍歷字串效果

   

  3. 字串比較

    Object C中字串的比較使用isEqualToString

//比較字串
        NSString *str1=[[NSString alloc] init];
        str1=@"Object C第一課";
        
        NSString *str2=[[NSString alloc] initWithString:@"Object C第一課"];
        
        BOOL flag=[str1 isEqualToString:str2];
        if(flag){
            NSLog(@"%@",@"字串相等");
        }
字串比較

 

  4. compare方法

    compare方法也用於比較,但是會返回三個值:

    NSOrderedSame: 判斷兩者類容是否完全一樣

    NSOrderedAscending: 判斷兩者大小,前者小於後者的時候為真

    NSOrderedDescending:判斷兩者大小,前者大於後者的時候為真

NSString *str1 = @"中國-朝鮮";
        
        NSString *str2 = @"中國-朝鮮";
        
        BOOL result = [str1 compare:str2] == NSOrderedSame;           
        NSLog(@"result:%d",result);
    
        
        NSString *str3=@"abc";
        NSString *str4=@"acc";
        result=[str3 compare:str4]==NSOrderedAscending;
        NSLog(@"result:%d",result);
        
        
        NSString *str5=@"adc";
        NSString *str6=@"aac";
        result=[str5 compare:str6]==NSOrderedDescending;
        NSLog(@"result:%d",result);
compare 方法測試

 

相關文章